「このブックには、ほかのデータソースへのリンクが含まれています。」 でもどこで参照しているのか教えてくれない。 Cntl+Fキーで、ブック全体を[リンクの編集]ダイアログ ボックスの[リンク元]に書いてある文字列で検索しても該当のセルが出てこない。 先日、この怪奇現象に悩まされた。何時間も悩んでいたら、ふと、思い付いた。そうだこのセルには、リスト(いわゆるドロップダウンリストだ)を定義していたんだと。リストの定義で外部ファイルを参照していたのであった。 リストを定義した行を他のファイルからコピーすると、リスト(いわゆるドロップダウンリストだ)の定義もコピーされてしまい、そのリスト定義が外部ファイルの参照になるのだ。あーやれやれ。
programmer
2025年7月24日木曜日
2025年7月23日水曜日
excelは2万行を超えるとVLOOKUPが使えなくなる。そうなったら、accessの出番。でもお金がかかるので、フリーのSQLのmysqlとかpostgreSQLかな。
excelのVLOOKUPをacccess,mysql,postgresqlでやるにはSELECT文で、テーブルAにはあるがテーブルBにはないものをwhere B.フィールド名=Nullみたいな条件で抽出してやればよい。
2025年5月6日火曜日
vbaでツールを作る時に役に立つルール
- menuという名前のシートを作る:ツールが動作するためにパラメタ(入出力のフォルダまたはファイル、デバッグモードで走行するか否かといったオプション等々)を記述したり、マイフォルダやマイファイルの選択ボタンを配置できるようにしておく。
- マイフォルダボタンを作る:ボタンにはフォルダ選択というキャプションをつけておくと良い。このボタンをクリックすると、入力や出力のフォルダをmenuシート(GUI画面)で設定する形にできる。
- トレース機能を作る:モジュールの走行状況がわかるようなデバッグ情報を要所要所で採取しておく。エラーが起きた時に何があったのがわかるようにしておく。テキストファイルとして、ツールと同じフォルダに追書きモードで記録していく。トラブルが起きたら、参照し、その時点で不要なら削除する(クリア)。トレースファイルがなければ、新規に作るという構造にしておく。
- ステータスバーに進行状況を表示する:ステータスバーとは、EXCELの画面左隅の表示エリアである。ここにポイントとなる箇所で、ツールの進行状況を出力せよ。トレース情報を一部、出力するのもよいかもしれない。
- Application.StatusBar = "表示する文字"
- Application.StatusBar = False でリセットせよ。アプリ終了前に必ずにね。
- 処理終了時にmsgboxコマンドで処理終了というメッセージを出力すると良い。さらに、timeコマンドで開始時と終了時の時間差を所要時間として表示するのも良いだろう。
2025年4月25日金曜日
vbaの画面構成がグチャグチャに壊れたのを戻すにはどうしたいいのか
[vba画面]→[ツール]→[オプション]⇨[ドッキング]で、全てのウィンドウにチェックを入れるだけで良い。そして、表示された画面を自分好みの位置にする。
- イミデェートウィンドウ
- ローカルウィンドウ
- ウォッチウィンドウ
- プロジェクトエクスプローラ
- プロパティウィンドウ
- オブジェクトウィンドウ
2025年4月24日木曜日
米、再び姿を消したのか?令和7年は早いなと思っていたら・・
昨日、近くのスーパー万代に米を買いに行った。棚は空っぽ。買えなかった。今年は去年より米の姿がなくなるのが早かった。幸い、近くのスーパーたこ一で5Kgで6134円(税込)でゲットできたけど、気楽に買えない値段になっていた。近くの阪急オアシスも米の棚は空っぽだった。コスモスにはカルロース米が2つほど積んであった。日本は、関税交渉でトランプ大統領にあるだけ買うよと言えば良いのではと思う。後日、OASISを覗くと、4千円ぐらいの5kgの富山コシヒカリが沢山、あった。あるとこにはある。でも阪急にはなかったな。何が起きているんだろうか?そして、数日経った今日、阪急のお米屋を覗くと、米が並んでいた。米は姿を消していなかった。
2025年4月21日月曜日
vbaでチェック印(レ点)の文字があるかを判定しようとしたところ、?(環境依存文字)でるため、文字として表記できず、やむを得ず、16進数として判定して、回避したお話。
チェック印(レ点)の文字は、EXCELのセルには書けるが、vbaのコードではとなり、記述できない。いわゆる、環境依存文字の一つのようだ。 では、どうすれば、その文字を判定できるのか? 一つの方法としては、チェック印(レ点)の文字は、16進数のコード2714(UNICODE)を判定すれば良いのではないかと考えた。
If Hex(AscW(Range("A1").Value))=2714 then MsgBOX "GotIt"
2025年4月17日木曜日
ACCESSを起動してパラメタ /x "macro-name"で起動すると/xで指定したマクロを動かせるということに気がつくまでの話
結論を先に言うと、ACCESSに/x "マクロ名"という起動パラメタをつけて起動すると、ACCESSが立ち上がった直後に/xで指定したマクロを動かすことができる。 例えば、バッチファイルで、start c:¥users¥username¥documents¥xxxxx.accdb /x "macro-name"でACCESSを起動すると/x "macro-name"で指定したマクロが動くわけだ。 これは、Office 起動 スイッチでググり、ACCESSの起動スイッチの/xの説明に詳しく書いてある。 ちなみにマクロ名をAutoExecにすると、/x AutoExecを付けなくてもACCESSを起動すると、AutoExecというマクロが動くのである。
ACCESSの起動スイッチ /x スイッチの前に指定した Access データベースを開いてから、指定したマクロを実行します。 データベースを開いたときにマクロを実行する別の方法は、AutoExec という名前のマクロを作成することです。 マクロにはウイルスが含まれている可能性があるため、実行には注意が必要です。 実行する場合は、コンピューターで最新のウイルス対策ソフトウェアを実行する、セキュリティ センターを使用して、すべてのマクロ (デジタル署名されているものを除く) を無効にする、マクロの信頼できるソースのリストを保持するという予防策を講じてください。まず、マイクロソフトでは起動パラメタではなく、スイッチと呼んでいるので、ググりかたを「こむづかしく」している。なかなか先程のページに辿り着けない。 どうすれば、ACCESSのマクロを起動時に呼び出せるのかが分かりにくいのだ。