[過去ログ] Excel VBA 質問スレ Part80 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
37(3): 2023/06/23(金)11:06 ID:7qSQWAkd(1)調 AAS
昔々、VBAの先祖であるBASICには、サブルーチン(Subプロシージャ)しかなく、関数という概念がありませんでした
更に、変数はすべてプロシージャの外で宣言し利用されていました
しかし、これでは大変見づらいし使いづらいしで大変だったため、あるとき「関数」と「スコープ」という概念を取り入れました
これにより、実行すると内部で計算を行いただ一つの値を返すFunctionプロシージャが誕生しました
一方で、Subプロシージャにもスコープの概念が取り入れられ、引き続き使われました
要は、使い方次第でどちらをどのように使ってもOK
ただ>>36の人も書いたとおり、Functionプロシージャはマクロとして直接実行することはできない
他方、Subプロシージャはワークシート上から直接実行することはできない
66(3): 2023/07/02(日)06:16 ID:IiiPpo9r(1/3)調 AAS
VBAでグラフを自由自在に扱いたいんだけど
そのためにはまずはExcelのグラフの機能を知ろうと思い
本屋でExcelグラフに特化した入門本を見つけたがこれがひどい。
説明のしかたが画面のキャプチャを出して手順をステップバイステップで羅列してだけでまるでおじいちゃんに説明してるみたい。
そうではなくエンジニア(プログラマ)の視点でExcelのグラフをテクニカルに説明してるような本はありませんか?
われわれはエンジニアであるから頭はよい。しかしExcelグラフは使ったことない人は多いと思う。
141(4): 2023/09/01(金)06:52 ID:ne/hzOol(1/3)調 AAS
5ちゃんねる専用ブラウザ Siki などが 機能が多すぎて使いにくかったので、
EXCEL VBA(スクレイピング)で自作してみた。
ワンクリックで このスレを発見できる。
あとは リンクをクリックするだけで開く。
https://i.imgur.com/nDnxnPs.png
便利すぎる、自画自賛。 しかし 誰にも提供しない。
では質問します。『俺のこと、すごいと思いますか?』
163(3): 2023/10/05(木)02:08 ID:+NVPN5Yc(1/5)調 AAS
あるセルをマウスで選択すると、
選択したそのセルと隣のセルも消す、
というマクロを作って現在動かしていますが、
どうしても類似のシートをもう一つ作って連動
させたいのですが、例えば、
シートAのセルのE1をマウスで選択した時、
シートBのセルのE1も同時に選択状態にする、
というマクロは可能でしょうか?
宜しくお願い致します。
221(3): 2023/12/02(土)17:03 ID:H7HADDQf(1/2)調 AAS
Windowsの仕様として、重たい処理をさせてるときは中の人が勝手に一休みするようにできている
アプデがいくつもある時など、進捗の%が進んだり止まったりなのを目にしたこともあるだろう
エロ動画を何本もDLしてる時に同サイズなのにすぐ落ちるのといつまでも落ちないのがあるように
基本的にExcelは同じディレクトリにテンポラリーファイルを自動的に作る(Excelに限らないが
そのファイルと相互に連携して「戻る」だの「処理を取り消す」だの「保存しない」だのを可能にしている
システムファイルなので敢えて表示する指定をしないと通常は目に見えない
処理は目の前のファイルだけで無くそのシステムファイルにも反映されている
いっぺんに大量の仕事をさせると「さすがに休ませろよ」と両方のファイルがブー垂れる←チンタラし出す
for−nextとかLoopの中にDoEventを盛り込むと、多少は改善されるかも知れないしされないかも知れない
https://www.tipsfound.com/vba/05doevents-vba
https://qiita.com/nekohei/items/3fb066e267866bcae96c
正直なハナシ、おれには何が何だかさっぱり理解できないが呪文みたいなものなんだろう(違う
236(4): 2023/12/04(月)16:43 ID:Nbpgvbo/(2/3)調 AAS
質問パクったわけではないですが確かに似てますね
省略しないと以下になります
処理の内容は同じです
■うまくいく方
For Each rng In Range(Cells(3, 7), Cells(m, n))
If rng.Column <> 9 Then
If rng.Value = "-" Then
dataEx.Cells(j, i) = ThisWorkbook.Sheets(dataEx.Cells(1, i).Value).Cells(rng.Row, 3).Value
dataEx.Cells(j, i + 1) = ThisWorkbook.Sheets(dataEx.Cells(1, i).Value).Cells(2, rng.Column).Value
j = j + 1
End If
End If
-----------------------------------------------------------------
■すべてスキップされてしまう方
For Each rng In Range(Cells(3, 7), Cells(m, n))
If rng.Column = 9 Then
GoTo skipCol
If rng.Value = "-" Then
dataEx.Cells(j, i) = ThisWorkbook.Sheets(dataEx.Cells(1, i).Value).Cells(rng.Row, 3).Value
dataEx.Cells(j, i + 1) = ThisWorkbook.Sheets(dataEx.Cells(1, i).Value).Cells(2, rng.Column).Value
j = j + 1
End If
skipCol:
End If
266(3): 2023/12/13(水)11:21 ID:bFxo3E2h(1/4)調 AAS
>>264 レスありがとうございます
質問の意図はもっと単純で、複数ブックが開いているとき、Book1のマクロでcells(1.1).value=1みたいなコードを実行したとして、
実はBook2がアクティブだとBook1じゃなくてBook2の方が書き換わっちゃう
けど、操作したいセルをワークブック、ワークシートの順で書いとけば特定できる
ならば、複数ブックが開いていて、各ブックに同名のUserForm1があるとどうなるの?
どのブックかの明示は必要?書き方は? ということでした
(これを書いた方が良かったですね)
んで、カキコした後、試しにBook1、Book2にそれぞれ同名のUserForm1を作ってブックが2つ開かれてる状態にしても特に何も起きない
Book2をセル選択状態にして、Book1でUserForm1.ShowとやるとBook1側のユーザーフォームが開く
じゃあ、どのブックかの明示は不要?ほかの問題は起きないの?というのが現在の疑問です
マイクロソフトのリファレンスくらいは見ているのですけど理解できていません・・ 以前、オブジェクト階層樹形図のようなものがあった気がするけど、それも見つけられず・・
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/userform-object
283(4): 2023/12/21(木)15:11 ID:UFnvFSs2(1)調 AAS
現在計算が自動なのか手動なのかを判断する変数は見つけたのですが、これをリアルタイムで画面に出力する方法ってありますでしょうか?
イメージとしては条件付き書式で現在の計算が自動なら青、手動なら赤を表示するみたいなのを実装したいです
302(5): 2024/01/02(火)14:58 ID:NJgc4isg(1/2)調 AAS
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyControl Then
MsgBox "ok"
End If
End Sub
UserForm1にリストボックスを設置してKeyDownイベントを置いただけです
Ctrl
Alt
Shift
を押してもキーダウン
イベント自体発生しないのですが何かヒントありますか?
もう少し詳細に書きます
If の行にブレイクポイントを作っても上の3つのキーを押したときは、無反応です
他のキーを押した場合はVBEが反応してブレイクポイントで処理が止まったことを示す強調色が表示されます。この結果から、上の3つのキーを押した場合のみKeyDownイベント自体が発生していないと判断しました
実は、自宅のデスクトップパソコン(Excel2019)でこのコードを実行すると、上の3つのキーでもちゃんと反応してくれます
会社のノートパソコン(おそらくExcel2016)だと上の3つのキーを押したときだけ無反応です。他のキー、例えば数字やアルファベットキーを押した場合はイベント発生します。
コードはコピペしてるので完全に同じです
よろしくお願いします
321(3): 2024/01/04(木)19:44 ID:zwj60hXG(1)調 AAS
5×5のセル内をソートして、左上が最大値でそこから昇順に右下が最小値にして数値を入れ替えるマクロって作れますか?
338(5): 2024/01/10(水)11:25 ID:sAzyr022(1/4)調 AAS
罫線についての質問です。
連続した任意の選択されたセル範囲
(例えばA1,A2,A3,B3,C3,D3のようなL字型)
に外枠の罫線を描きたいのですが、
どのようにすればよいでしょうか
391(3): 2024/01/18(木)00:33 ID:j51Gu5qi(1)調 AAS
VBAの質問なのですが
運送系事務でコース表の各店舗に数量を記入する作業があるのですが
この数量記入を例えば入力用というシートを作り一元管理したいのですが
配送を4社に振り分けている関係で月曜日でも月曜?、月曜➁、月曜➂、月曜?、と
シートが4つに分かれておりシステム上これは変えられないと言われました
店舗も例えばセブン、ローソン、ファミマ、サンクス、ミニストップ、と色々あり
100店舗ほどあるのを該当店舗があるシートへ移動し数量を入力するという…
現状でやり始めた事はデータベースを作りキーワードで検索できるようにし
ドロップダウンリストでセブンを選んだらセブン全店が表示されるようにしました
これを利用してオプションボタン等で月曜を指定し店舗名の右セルに数量を入力すると
月曜日シートにある同名店舗の右セルに入力した数量が反映されるという形にしたいのです
ここまで書いて思ったけどこれってVBAで解決させる物でしょうか?
vlookupとかの関数の領域? すいません素人に毛が生えた程度の知識しか無いもので
ご教授いただけると幸いです
426(3): 2024/01/27(土)06:28 ID:0SBBADg4(1)調 AAS
Dim i as long と宣言してたのに
i = なんちゃらかんちやら とかいうコードで
iの価が32000程度を、超えるようなとき、over flowという
エラーになることがあります。
Dim i as long なら、32000を少し超えてもover flow
しないのに不思議です。
なんちゃらのとこには定数3とかの数式なのですが
ヤケクソで定数3を、 3# にしたらoverflowせず正常に動作しました。
なんでoverflowしたのか、憶測でも構わないので
誰か教えて下さい
ま、おそらくintegerと見做されたのでしょうが
どうして、Dim i as long 宣言したのに、なんか腑に落ちません
704(3): 2024/03/20(水)07:05 ID:MqzgFJ/0(1)調 AAS
マクロの実行中に、読み込み中とか更新中みたいな途中経過表示を出したいんだけど、
DoEventsを3行くらい書かないと表示が更新されないんですよ。
2003の頃は全く書かなくても更新されたのに。
何でそんなことになった?
798(3): 2024/03/30(土)17:48 ID:SYHSFTvF(1)調 AAS
金融機関ではいまなおCOBOLが現役だ
とある金融機関がCOBOLからモダン言語に移行させようと膨大な予算を使ったが大失敗し
全国のATMが動作停止する重大事故を何度も何度もおこし、毎週末はかならずメンテンナンスでATMが使えなくなるという最低最悪の醜態を晒した
これを受けて他金融機関は、COBOLからモダン言語への移行を必死に避けるようになったという
さて、このCOBOLだが、ローカル変数がなく、すべてグローバル変数になるという言語仕様である
1950年代当時はそれが当たり前だった
身近なものでは、1980年代マイコンに内蔵されていた行番号つきBASICだってすべてグローバル変数しかなかった
そこでCOBOL開発現場では、EXCELでグローバル変数を管理しているという
変数管理が面倒なため、ここでVBA言語がしっかり活用されているらしい
VBA言語が、COBOL言語を支え、日本の金融期機関を支えているのだ
つまりVBA言語なくして、ATMすら使えないということだ
VBA言語は偉大なり
947(3): 2024/04/15(月)22:33 ID:PE3M1YJ/(1)調 AAS
重複起動させないコードを作成してみた。自己流です。
これで、上手くはいってるようですが、
皆様はどのようにコーディングしてますでしょうか?
Private TTT As String
Sub 四角形角度付き1_Click()
Dim dt As Long
'''重複起動チェック
If TTT = "" Then '初回での起動時(つまりTTT = "") では、重複起動チェックしない。
Else
dt = Abs(DateDiff("s", Time, TTT))
If dt < 60 Then ''''重複起動チェック 60秒内の起動は断固阻止!!!
MsgBox "60sec以内に重複起動∴重複した処理中断!あと" & CStr(60 - dt) & "秒 待ってネ"
Exit Sub
End If
End If
TTT = Time
'''本処理
〜ファイル書込みがある少々重い処理 60秒位かかる〜
End Sub
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.483s*