-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

GIOコードの計算をVBA化。

ネット上にメッシュコード関連の計算式があったので、Excelの関数として使えるようにVBA化しました。

参考にした計算式が乗っていたサイトは、残念ながら無くなってしまいましたが、魚拓がのこっていたので張り付けます↓

式をコード化したものが以下

‘—————————————————-
‘緯度経度から3次(1㎞)メッシュ
‘—————————————————-
Function LatLontoMesh(lat, lon)
Dim s1, a1
s1 = WorksheetFunction.Quotient(lat * 60, 40)
a1 = (lat * 60) – (s1 * 40)
s2 = WorksheetFunction.RoundDown(lon – 100, 0)
a2 = (lon – 100) – s2
s3 = WorksheetFunction.Quotient(a1, 5)
a3 = a1 – (s3 * 5)
s4 = WorksheetFunction.Quotient(a2 * 60, 7.5)
a4 = (a2 * 60) – (s4 * 7.5)
s5 = WorksheetFunction.Quotient(a3 * 60, 30)
s6 = WorksheetFunction.Quotient(a4 * 60, 45)

LatLontoMesh = s1 & s2 & s3 & s4 & s5 & s6
End Function

‘—————————————————-
‘3次(1㎞)メッシュから緯度経度を返す
‘—————————————————-
Function CalcLatLonFromMesh1km(mesh, ctr)
Dim strLat, strLon

‘5439-2308-2
‘3次LAT式
strLat = Left(mesh, 2) / 1.5 + (((Mid(mesh, 5, 1) * 5) / 100) / 60 * 100) + (((Mid(mesh, 7, 1) * 30) / 10000) / (60 * 60) * 10000)
‘3次LON式
strLon = Mid(mesh, 3, 2) + 100 + (((Mid(mesh, 6, 1) * 7.5) / 100) / 60 * 100) + (((Mid(mesh, 8, 1) * 45) / 10000) / (60 * 60) * 10000)

If ctr = “lat” Then CalcLatLonFromMesh1km = strLat
If ctr = “lon” Then CalcLatLonFromMesh1km = strLon

End Function

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

CURLのAPIリクエストをJavaScriptに書き直すのに難儀したので備忘録。

Curl -u loginaccount:password をどうやってJavaScriptに書き直せばいいんだっていう。

-uはヘッダー情報として、Basic64エンコードしたアカウント:パスを送付しているらしいです。

以下はJQueryを使ったヘッダー。(Script内でエンコードするためにbase64.jsというライブラリを使っています)


bc= $.base64.encode(“mirukupurin:password1”); ←認証情報をエンコード

function getidfromapi() {

$.ajax({

url: “https://APIURL~”,

success: function(data){

alert(“GETリクエスト成功!ID=” + data.Id + “ですよ”);

;},

error: function(jqXHR, textStatus, errorThrown){

alert(textStatus+”: “+errorThrown);

},

beforeSend: function(xhr) {

xhr.setRequestHeader(“Authorization”, “Basic ” + bc); ←これ

},

});

}

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

解決!

Excel2007を使っていますが

好奇心に負けて2013をちょっと並行で入れて、アンインストールしました。

すると、Excel立ち上げ時に必ず構成画面が出るようになってしまい

ファイルを開くまですごく時間がかかる!

Q&Aサイトには、Excelを一度すべてアンインストールしてから

入れなおせってあるけど、会社のPCにつき、CD貸出言いにくい・・

というわけで、だめもとでいろいろやってみたところ、

システムの復元 から インストール前の時点に復元することで

出なくなりました!

システムの復元は、スタートメニュー>すべてのプログラム>アクセサリ>システムツールの中にあります。

実行するとウィザードが立ち上がるので、「次へ」を押して、復元ポイントの選択から、

Excel2013を入れる前の日付を復元ポイントとして選択し、ウィザードに従ってリストアしていくと

PCをインストールする前の状態に戻してくれるので、変な警告も出なくなります。

但し、復元時点以降に入れたソフトウェアもExcel2013と共に無かったことになるので入れなおしになりますのでご注意ください。

なお、作成したテキストファイルとかはなくならないのでご安心を。

めでたし

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

引き続き、300万件のレコードを持つAccessテーブルの操作です。

つまづきながらも、なんとかデータのUPLOADが出来たものの、

集計クエリを作成していたらエラーになりました。解決したので、健忘録として残しておきます。

先に行っておきますが、原因はポカミスですた・・・。役に立たない情報かも。でも!人のエラーみて我がエラー直せ、といいます(いいません)

Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

AccessからSQLiteを操作する為の設定手順です。(SQLiteのデーターベースがあることが前提)

SQLite用のODBCドライバ(無料)が必要になります。

SQLiteデーターベースはAccessの上限が2GBなのに対し、4GBまでと要領が大きいのが魅力です。

ドライバをインストールして、テーブルとしてリンクすれば、AccessDBと同じようにクエリでもフォームでもドンと来い!

但し、ODBCドライバのせいか、ちょと遅いです。


①まず、ODBCドライバをダウンロードします。

ここから(ACCESS2003は32ビットなので”SQLiteODBC.exe”をダウンロードします)
http://www.ch-werner.de/sqliteodbc/


②ダウンロードしたEXEファイルを実行すると、インストールが始まります。

ガイドに沿って、インストールします。


③DSNに登録するためにODBCデーターソースアドミニストレータを起動

するわけですが、ここで注意!普通に起動(スタート → コントロール パネル → 管理ツール → データソース(ODBC))すると

Windows7では、64ビット用のODBCが開いてしまいます。32ビット用と64ビット用、ODBCは別なのです。

スタートメニューの下にある検索窓に、下記をコピペしEnterを押すことで32ビット用ODBCを起動してください。

%systemdrive%\Windows\SysWoW64\Odbcad32.exe

システムDSNを開くと、すでにSQLiteドライバが表示されている場合はそのまま閉じてOK。

無ければ追加ボタンから追加してください。


④Accessの方の設定を行い、SQLiteデーターベースに接続してテーブルをリンクします。

ファイル>外部データーの取込み>テーブルのリンクをクリック。

表示されたファイル選択ダイアログの「ファイルの種類」を「ODBCデーターソース()」にします。

コンピューターデーターソースタブから用意されたSQLite DBのバージョンにあわせて

SQLite又はSQLite3を選択しOKボタン押下。次の画面で「BROUSE・・・」ボタンを押し、SQLite DBを選択。

OKを押すと、テーブル選択画面が表示されますので、リンクしたいテーブルを選択しOKを押すと、完了です。

 

以上

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

アクセスクエリで

「式が正しく入力されていないか、複雑すぎるため評価できません」

というエラーメッセージが出た際のありがちな原因をリストアップします。

原因① 「文字列」型の数値を計算しようとしている。

SUM関数などの集約関数にかけているカラム、本当に数値形式ですか?

文字列形式の数値の場合、「Val()」関数で数値に置換しないと計算できません。

よって上記のエラーとなります。

原因② 「数値」型の数値にVal関数をかけている。

もともと数値型のものをVal関数で数値にしようとしてエラーが出たことがありました。

ご確認ください。

大抵は複雑すぎるというより型が原因の事が多いのです。型をご確認ください。

以上

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

freehostiaの管理画面にログインしたところ、こんなメッセージが表示されました(英語で)

「過去数週間にわたって、WordPressのログインページに異常なトラフィックがあり、

どうやらブルートフォース攻撃を受けているという結論になりました。

Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

拡張子.mdbファイルで使っていたモジュールをスピードアップの為に

Access2007の拡張子.mccdb形式に変更した後実行した際

タイトルの通り「データベースの形式”~.accdb”を認識できません。」が出ました。

忘れた頃にまたやりそうなので、健忘録として残しておきます。

Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

現在Access開発をしており、スピード問題に絶賛悩み中。

健忘録をかねて、Accessのスピードアップ処方をまとめてみます。効果の程はケースバイケースです。Just Try

<ケース:データ取込み編>

レコード数10万件以上のデータ取込みで時間がかかる場合。

Access搭載のファイル取込み機能を使うべからず。

Access以外のファイルを取込む際に、ファイル→外部データの取込み→インポートを使ったり

上記に相当する「TransferText acImportDelim」をマクロで使っている場合は結構時間がかかります。

面倒ですが、VBAやJavaScriptでADOを呼び出して取込みをしてみてください。サンプルコードはリンク先にあります。

②データーベースの最適化を実行する。

特に大きいDBになると、最初は順調だった取り込みが、回を重ねて重~くなり最終的にはエラーが出ることがあります。

エラー「データベースとして開くことができませんでした。アプリケーションで認識できないデータベースであるか

またはファイルが破損しています。」

AccessDBは上限が2GBまで。1GBを超えたあたりからこういうエラーが出やすくなります。

原因は破損です。Accessの修復ウィザードを実行すれば少し解消するでしょう。

が、あまり良い状態ではありませんので頻繁にバックアップをとるようにしましょう。

(2003修復ウィザード : ツール→データーベースユーティリティー→データーベースの最適化)

(2007修復ウィザード : Officeボタン→管理→データーベースの最適化)

③テーブルを別のファイルに分ける。出来ればMDE形式にする

フォームやクエリやDBが混在している場合、重いDBを別のファイルに外だしして

テーブルのリンクで繋ぐようにするとパフォーマンスがよくなる場合があります。

また、DBの形式をMDBではなくMDEにすると、少し早くなる場合があります。

取込みが早くなるというより、単純な検索クエリに多少の効果がありました。

(まずは、ツール→データーベースユーティリティ→データーベースの変換を表示し、

現在のファイル形式が「Access2002-2003ファイル形式」より古いバージョンの場合、これ又は以降のバージョンを選択して変換。

変換したファイルを開き、ツール→データーベースユーティリティ→MDEファイルの作成をクリック)

なお、MDEファイルはフォーム等が作れないテーブル専用の形式になります。

<ケース: 帳票フォームを開くのが重い>

①ACCESSの形式をあげてみる。

何百万レコードも表示するサブフォームが含まれている場合、開くまでにだいぶ待ち時間があっていらいらします。

Access2000形式から2007形式に変えてみたところ、実際の開くまでにかかる時間は変わらなかったのですが、

2007形式は早い段階でサブフォームにデータが表示され始めるので、体感速度が大分早く感じました。

②サブフォームかリストビューか・・・

サブフォームをいくつも表示するフォームの場合、VBAで1回だけSQLを実行して振り分けた方が早い場合もあります。

WHERE句や結合が複雑かつ、最終的に表示する件数が少なく、複数のサブフォームに振り分け表示する場合に有効。

逆にレコード数が多いサブフォームが1つのみという場合はサブフォームのままにしておいた方が早いです。

<ケース:クエリが遅い場合>

 ①Index(もくじ)を作成する

大容量のテーブルだと単純なSelectクエリでも実行に時間がかかります。

Where句の条件にしているカラムについて、Indexファイルを作成しておくと早くなることがあります。

Index作成用にクエリを新規作成しSQLを書いてIndexファイルを作成「create index 適当に命名  テーブル名(カラム名)」

なお、Indexが作成できるのはテーブルだけです。クエリにはIndexをつけられませんのでご注意ください。

単純なクエリなら効果がありますが、結合の多い複雑なものだと逆に遅くなることもあります。

 ②集約関数は都度実行する必要はあるのか?

クエリが重い場合の犯人はたいていGroupByです。何百万件もあるなら集約に時間がかかるのは当然です。

これをフォームやファイルを開く都度動的に行う必要がないなら、日を決めてどこかテーブルUpdateして

そちらを参照するようにすべきでしょう(当たり前ですが)

<ケース:Access2013の場合>

Excel2013の記事でも書きましたが、「ファイルの保護」「保護の解除」の処理が異常に遅いらしいです。

これはAccessでも同様で保護不要であれば外した方がいいかもしれません。

以上でした。

おまけ:「SQLiteは早い」という噂をどこかで聞いた記憶があり、勝手に期待して試したらぜんぜん遅くてガッカリした。

      SQLiteは早くても、SQLiteのODBCドライバはそうでもないみたい・・ 400万レコードあるせいかもしれないが。

 

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

前回、JavaScriptライブラリを使ってスマホゲームが出来たところで、

これをアプリ化してみたい!と思うと思いますので手順を紹介します。Apple以外は無料です。

Appleの人はおとなしくWEBサーバーに置いておきましょう。

AdobeのCreative Cloud(無償、要ユーザー登録)にあるPhone Gap(フォーンギャップ)
を利用すると簡単にアプリに出来ます。

http://html.adobe.com/jp/edge/phonegap-build/
iphoneからWindows8まで実に様々ですが、iphone等のiosアプリはビルドするのに「証明書」やら「プロビジョニングコード」やらが

必要で、これらを得るためにAppleのデベロッパープログラムに登録する必要があります。

(Appleの開発プログラムは年会費99ドルだったと思います。)アンドロイドなら無料です。

<ステップ>

①Adobe CreativeCloudにログイン

https://creative.adobe.com/ja

②「ダウンロード」タブからPhoneGapBuildを探す。

面倒な場合はリンクをクリック⇒https://build.phonegap.com/apps

③新規アプリケーションボタンをクリック

④GitHubが何のことか分からない人はプライベートタブからZipをアップロード。

ここで、前に作成したJavaScript一式をZip圧縮したものを選択します。

後は、ウィザードに沿って進めていくと、コードを入れなかったiosはエラーとなりますが、その他はビルドされて

ボタンを押せばダウンロード可能な状態です。

以上