[過去ログ] Excel VBA 質問スレ Part82 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
803: 05/23(金)21:21 ID:eG6EJpyW(1)調 AAS
>>802
ポインタに++すれば次の要素になるからむしろCのほうが融通が効く
804: 05/23(金)22:01 ID:ai481srR(1)調 AAS
4行以上のレスは読む必要無いってマジだな
805: 05/23(金)22:09 ID:4KSUIwLz(1)調 AAS
ぬるぽ
806: 05/23(金)23:17 ID:fxCKrz9G(2/2)調 AAS
>>793
データアナリストならパワークエリーしてほしいな
807: 05/24(土)06:17 ID:OSW0csek(1/3)調 AAS
属人化し易い言語と言うことは融通の利く言語と言うことでもある。
例えば、CやC++ではポインタが使えたけどC#では「それは危険だ」ということで使えなくなってしまった。
代わりにデリゲートを使ってセーフティーに参照しなさい、ってことなんだろうけど、まぁお仕事用の開発だったらそれでもいいのかもしれないけど、
昔PS-VITAってゲーム機があって、これがエクスペリアってスマホとクロスプラットフォームで開発できるように開発言語をC#にしてしまった。
ポインタは確かに参照先間違えると吹っ飛んだりメモリリーク起こしたりと危険なものではあったけど、扱いが面倒ではないし融通の利く機能だった。
それを潰してしまったことがPSPシリーズがVITAで終わってしまった原因ではないかと今でも思ってる。
808: 05/24(土)06:41 ID:OSW0csek(2/3)調 AAS
>>798
JavaScriptをやったときには
前から.Net系の言語や、まぁVBAでもそうなんだけど、
何でクラスのインスタンスや文字列とかは変数に入れられるのにメソッドは入れられないんだろ?
って思ってた時期があって、
JavaScriptに当たったとき、
あ、出来る言語もあるんだってなって、あれVBAに欲しいなぁとは思った。
後はスクリプト系の言語はスカラー変数で型の指定がないから型の指定に慣れてると逆にそれが面倒だったかな。
VBAで言えば全部Variantで扱ってるようなもんだし。厳密には違うらしいけど。
809: 05/24(土)10:35 ID:sJ/mZ3mU(1)調 AAS
若いコにはやっぱPython辺りが人気とか?
810: 05/24(土)13:44 ID:3VNn3d5Y(1)調 AAS
スピル周りやLET,LAMBDAなどの関数が充実し
Excel=ビジュアルな関数型言語だと勝手に思っている
811: 05/24(土)14:39 ID:a4AdJqTs(1)調 AAS
ビジュアルな関数型言語はemacs-lispだろ
812: 05/24(土)15:44 ID:0gUvgwlc(1)調 AAS
表検索するのにSQL使ってたけど、FILTER覚えたら単純な検索ならこれでいいかー、ってなった
813
(1): 05/24(土)20:17 ID:c7V+L981(1)調 AAS
このスレはバカの話はなぜ長いのか考えるスレになりました
814: 05/24(土)20:41 ID:6QA0+Pxw(1)調 AAS
頭の良い人は難しいことを簡単に説明出来る
馬鹿は簡単なことを長々と判り難くする
815: 05/24(土)20:44 ID:OSW0csek(3/3)調 AAS
>>813
正直すまんかった
久しぶりにVBAスレ来たからつい・・・
でもVBAはいい言語だと思うよ
816
(1): 05/24(土)21:07 ID:cYe6QRvj(1)調 AAS
VBAは言語なのだろうか
VBは言語だけども
817: 05/24(土)21:42 ID:ZMjSY/PV(1/2)調 AAS
A1セルはこのフォルダのパスを記入する
A2セルはこのフォルダのパスを記入する

流石にこれは通じる、、、よね?
818: 05/24(土)21:44 ID:ZMjSY/PV(2/2)調 AAS
>>816
チューリング完全がプログラム言語の定義なのでしょう?
だったらVBAはプログラミング言語なのでは
819: 05/24(土)22:37 ID:iK5rs3WU(1)調 AAS
A1 Write this folder pass.
820
(1): 05/25(日)12:18 ID:IvH5YvLQ(1/3)調 AAS
dictionaryやFileSystemObjectのfunction関数を使っているけど、dictionaryに登録する処理や取得したファイル名やファイルパスに対する操作は事なる

こう言う場合、どうすれば個別の条件にも対応できるfunction関数が作れますか?
821: 05/25(日)12:36 ID:ubpRgCst(1/2)調 AAS
異なる操作をひとつの関数で行いたいという質問ですね!
まずはどういう操作を行っているのか教えてください!
822
(2): 05/25(日)12:45 ID:czPn1bap(1/3)調 AAS
dictionaryは死ぬ予定だから使うのやめなよ
823
(1): 05/25(日)12:53 ID:ubpRgCst(2/2)調 AAS
>>822
そうですね!
Excelなのだからデータはワークシートに格納するのがスジですね!
824: 05/25(日)13:20 ID:fZ8kzLje(1)調 AAS
AIみたいな解答ワラタ
825: 05/25(日)16:48 ID:zOE9ehCa(1)調 AAS
ホントにAIに聞いた。
個別の条件にも柔軟に対応できる function を作るには、いくつかのアプローチが考えられます。例えば、以下のような方法を試してみてはいかがでしょうか。
1. パラメータを活用する
2. Enum または定数を使う
3. コールバック関数を使う
826: 05/25(日)17:36 ID:QBoxveBd(1/2)調 AAS
何をしたいのかが謎
型によって処理を分岐させたいってことかね

Function 関数(処理対象)
 型名 = TypeName(処理対象)
 Select Case 型名
  Case "Dictionary"

  Case "File"

  Case "Folder"

 End Select
End Function
827
(1): 05/25(日)18:31 ID:czPn1bap(2/3)調 AAS
>>823
そういう話じゃなくVBS廃止の副作用で連想配列や正規表現が死ぬって話
828
(1): 05/25(日)18:42 ID:rOBfPREU(1)調 AAS
>>827
VBS廃止の副作用で死ぬのは噂や推測じゃなくて公式の情報なの?
829
(1): 05/25(日)19:07 ID:IvH5YvLQ(2/3)調 AAS
ファイルシステムオブジェクトでフォルダの中のファイル名一覧と、ファイルパスを取得したい時もあれば、
ファイル名に部分一致するファイルのパスを取得したい時もある
830
(1): 05/25(日)19:13 ID:5C/Jye7Q(1)調 AAS
従来の正規表現の代用って無いの
831: 05/25(日)19:54 ID:czPn1bap(3/3)調 AAS
>>828
逆にあれだけ情報出ててなんで死なないと思うの?
https://techcommunity.microsoft.com/blog/windows-itpro-blog/vbscript-deprecation-timelines-and-next-steps/4148301

>>830
vba-regex by sihlfallっていう、
RegExp代替のフルVBAで書かれた正規表現エンジンがある
832: 05/25(日)19:58 ID:bo3VS07C(1)調 AAS
>>829
はい!
if文で条件分岐すれば、簡単に実現できます!
833
(1): 05/25(日)20:04 ID:IvH5YvLQ(3/3)調 AAS
私はVBAの正規表現が死んだら、パワークエリーでJavaScriptの正規表現を使うわ

set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか?
Wordのドキュメントやアプリケーションを処理する時にエラーが出たのでそう思いました。
834: 05/25(日)22:03 ID:QBoxveBd(2/2)調 AAS
正規表現はREGEX関数が実装されたのでVBAでやる必要なし
835
(1): 05/25(日)22:32 ID:d/seLvao(1)調 AAS
>>822
知ったか乙
良く調べて書き直せ
836
(1): 05/26(月)02:34 ID:J879X3+V(1)調 AAS
>>835
Microsoft Scripting Runtimeに依存してるからVBSと共に死ぬ
FSOなんかはScripting Runtimeには依存してないから引き続き使える
間違ってるなら指摘して
認識改めるから
837
(1): 05/26(月)09:38 ID:G1Vrdcz4(1)調 AAS
>>820 が聞きたいのは
https://www.limecode.jp/entry/syntax/bind-set-filesystemobject
この辺の処理の仕方なんでは? 最後まで精読すれば、どういう書き方をすれば
より都合が良くなるか、それなり理解が深まるような
838: 05/26(月)09:53 ID:wHcYCN0P(1)調 AAS
>>833
>set オブジェクト = nothing
それ書かないで過去に何度か問題起きてたような
ファイルopenして、close書かなくても勝手に閉じてくれるとしても、書いたほうがいいようなもん
たった1行各程度で未然にトラブル防げるなら書いとけと
(かと言って、親オブジェクトから連なる小オブジェクトはいちいちnothingせずに、親オブジェクトだけ書いちゃうことも多いけどな。小さい処理だと特に)
839: 05/26(月)12:08 ID:chNfFSjB(1)調 AAS
>>836
間違えている
どのDLLに何が入っているかだ
840: 05/26(月)13:55 ID:cvwCoF8H(1)調 AAS
>set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか?

した方が良いじゃなくてするべき
841: 05/26(月)17:21 ID:c1JRhLC0(1)調 AAS
コピペ荒らしこのスレだけ来ないの面白いな
842
(1): 05/26(月)18:35 ID:FaOK97dk(1/2)調 AAS
>>837
すみません
今の私は例えばファイルシステムで言えば、
フォルダの中の全てのフォルダ名とフォルダパスを取得
フォルダの中の全てのファイル名とファイルパスを取得
フォルダの中に指定のファイル名と異なるファイルがあれば削除
と言う様に、
それぞれのサブプロシージャを作成する事しかできていません
なので、一つのサブプロシージャに条件に応じて複数の処理が行えないかなと思いました
原作論で言えば、一つの処理しかできないサブプロシージャこそ正しいのかもしれませんが
あと、それぞれのプロシージャでファイルシステムオブジェクトを宣言とセットをしてしまっています

nothingは今までプロシージャを抜けた時点で解放されるから特にする必要がないと思っていましたが、Wordを操作する様になって、nothingをしないと処理が止まってしまうので意識する様になりました
843: 05/26(月)19:11 ID:mCaBFscc(1)調 AAS
Sub Yaritai(i as integer)
if (i and 1) <> 0 then
Call Sub1()
elseif (i and 2) <> 0 then
Call Sub2()
End Sub
844
(1): 05/26(月)20:30 ID:sP5+kUYx(1/2)調 AAS
>>842
ご自分で言ってる通り、ひとつのモジュール、関数、メソッド等にはひとつの役割を与えて作るのがセオリーです。ちなみにそれを単一責任原則と言います。
ひとつのプロシージャ内で出来るかと言えば、再起処理やStaticな変数を上手く使えば恐らく出来ないことは無いでしょうが、そうするメリットをあまり感じません。
ひとつのプロシージャで処理するのではなく、ひとつのクラスとしてその辺の処理を行うことを検討しては如何でしょうか?
そうすればメンバ変数として宣言したもののインスタンスをコンストラクタで生成することも出来ますし、デストラクタで解放することも出来ますよ
845: 05/26(月)20:36 ID:sP5+kUYx(2/2)調 AAS
×再起処理
◯再帰処理
誤変換すまんこ
846: 05/26(月)21:18 ID:FaOK97dk(2/2)調 AAS
>>844
クラスモジュールを一通りやった事がありますが、いまいちクラスモジュールの使い方を知りません
どうすればそれぞれの機能をクラスモジュールで効率的に実装できるでしょうか?
847
(2): 05/26(月)22:59 ID:Eh03XDLb(1)調 AAS
セルから機種依存文字を直接拾ってくるのは難しいですか?

例えば☐(unicode:2610)が入ってるセルをクリックすると☑(unicode:2611)に書き換える、みたいなのを実装する場合、
if(Range("A1").text="☐")then
だとRange("A1").textでセルの文字は取得できませんよね?
(もちろん「="☐"」で直接比較することもできませんが)

どうにかしてセルの機種依存文字を拾ってきてその種類を判定することは可能でしょうか?
848
(1): 05/26(月)23:15 ID:MWZ/4kNq(1)調 AAS
>>847
Hex(WorksheetFunction.Unicode(Range("A1")))
849: 05/27(火)15:49 ID:j5Gfr/Ar(1)調 AAS
>>847
>Range("A1").textでセルの文字は取得できませんよね?
取得はできる。VBEで使えない文字だからソースに直接その文字を書けないだけ

Dim CHECK_ON As String: CHECK_ON = ChrW(&H2610)
Dim CHECK_OFF As String: CHECK_OFF = ChrW(&H2611)

If Range("A1").Value = CHECK_ON Then
Range("A1").Value = CHECK_OFF
Else
Range("A1").Value = CHECK_ON
End If
850: 05/27(火)17:59 ID:2OPk25Mu(1)調 AAS
>>848
解決しました。
ありがとうございます。
851
(3): 05/27(火)20:17 ID:3QS90eHP(1)調 AAS
Excelの話ではないからスレ違いなんですが、 Wordのドキュメントの2ページ目の行に文字列を挿入するにはどうしたらいいでしょうか?
2ページ目の〜行目にと言う様な指定はできないのでしょうか?
852
(1): 05/27(火)20:38 ID:0hlUsnMF(1)調 AAS
>>851
スレチとわかっていて厚かましい
死ね
853
(1): 05/27(火)20:52 ID:OuONf5SF(1)調 AAS
>>852
この馬鹿モンが!

>>851
いい質問ですね
ExcelのほうがメジャーでWordはマイナーなのだけど
WordのVBAをはじめた人にとっては初期段階でやりたい操作なのではないでしょうか?

簡単ではないですが解決策はあります
たしかinformationみたいな名のプロパティを使ったような気がする
(もうWordVBAは数年使ってないから忘れた)
ChatGPT使えば教えてくれるかも
854: 05/27(火)20:54 ID:DtCiAPP8(1)調 AAS
>>853
死ね
855: 05/27(火)22:13 ID:JUnNHiQe(1)調 AAS
>>851
ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range = "文字列" & ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range
856: 05/28(水)00:45 ID:7WzKj5D7(1)調 AAS
フォームを作るのに標準のコントロールやAPIでは動かないことがあったから、ついにPowershellで作り始めちゃった
857: 05/28(水)01:00 ID:+7HocyMO(1)調 AAS
PowerShellは
System.Collections.Genericが使えるからかなり楽だよなぁ
VBAと違ってフォームデザイナが標準で付いてないのが難だが
858: 05/28(水)07:40 ID:LbsE8EcH(1)調 AAS
VSの方が楽なんでは
PS使ったことないけど
859: 05/28(水)08:42 ID:WNN+73zR(1/4)調 AAS
PowerShellはbatと違って、一手間や権限設定が必要と聞いたからやめた震え声
本当にそうなのですか?
860: 05/28(水)08:58 ID:DZlhdmsz(1)調 AAS
震え声で言ってるの?
861: 05/28(水)09:02 ID:3/66YXCT(1)調 AAS
スレタイを音読してみよう
862: 05/28(水)09:56 ID:0RI44N1Y(1)調 AAS
エグザイル ビバ しつもんしる
863
(1): 05/28(水)20:05 ID:WNN+73zR(2/4)調 AAS
VBAでファイルやフォルダのパスはいつも一覧表で利用しているのですが、当然属人化するリスクがあるので、もっと柔軟にパスを設定できる方法を探しています。
今考えているのは、ファイルやフォルダが見つからなかった時にダイアログを開いてフォルダやファイルを選択させ、選択したファイルやフォルダのパスをセルに記入する、と言う方法なのですが、もっと簡単で確実で柔軟な方法はないでしょうか?
864
(1): 05/28(水)20:44 ID:Z5h4paoG(1)調 AAS
自分は設定シートを用意して、そこに記述してあるものを参照してる
865: 05/28(水)20:50 ID:bd87TuSw(1)調 AAS
ログインユーザーのマイドキュメントをルートにして開く
具体的には「HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal」
のパス
866: 05/28(水)21:40 ID:WNN+73zR(3/4)調 AAS
>>864
その設定用シートに
例えばフォルダやファイルを複数選択した状況で右クリックのパスをコピーでシートに貼り付ける
という事さえも出来ない、わからない人も想定しないといけない訳で、、、
867
(1): 05/28(水)21:58 ID://Fv0twK(1/2)調 AAS
>>863
エクスプローラーからファイルをドラッグドロップ
868
(1): 05/28(水)22:16 ID:WNN+73zR(4/4)調 AAS
>>867
知らなかったです
これができるなら本当に希望が見えてきました
869: 05/28(水)22:18 ID:QfAx2JsO(1)調 AAS
馬鹿ばっか
870
(1): 05/28(水)23:46 ID://Fv0twK(2/2)調 AAS
>>868
https://excel.syogyoumujou.com/memorandum/d_and_d_1.html
このやり方が簡単そう
871: 05/29(木)07:11 ID:cC95Jm/J(1)調 AAS
>>870
よくよく考えれば当たり前なんだけど、ドラッグ&ドロップで追加する機能もあるんだ
これは便利だ
872
(1): 05/29(木)17:25 ID:fp+yAGdo(1)調 AAS
FileSystemObject の TextStream が使えないなら ADODB の Stream を使えばいいじゃない
と思ったら挙動が違ってびっくり
873
(1): 06/01(日)20:16 ID:wTah86rB(1)調 AAS
初歩的な質問で申し訳ないですが、マクロ実行中にエラーなどでデバック画面、エディタ画面に移動せずに、エラーハンドリングなどを実行してプロシージャを終了するにはどうしたらいいですか?
874: 06/01(日)21:54 ID:fzXRF4Kq(1)調 AAS
>>873
On Error Resume Next
875: 06/02(月)00:34 ID:14Td775l(1/2)調 AAS
[ツール] [オプション] [全般]
エラーでトラップ
●エラー処理対象外のエラーで中断

ということではなくて?
876: 06/02(月)00:35 ID:14Td775l(2/2)調 AAS
×エラーでトラップ
◯エラートラップ
877: 06/02(月)07:36 ID:hx4qvUMZ(1)調 AAS
>>614
on error goto ラベル名
vba エラーハンドリング で検索して例を見た方が早いよ
878
(1): 06/02(月)08:46 ID:IeMpK/LE(1)調 AAS
>>614
そんなひとつのモジュールに詰め込んだら管理しにくいでしょ。
モジュールは分ける。
879: 06/02(月)09:24 ID:3Ov4fjqk(1)調 AAS
>>878
何を基準にかを書かかないと役立たずじゃない?
880
(1): 06/02(月)15:03 ID:DSKTrfoz(1)調 AAS
馬鹿はそんなことも判らないのか
881: 06/02(月)15:07 ID:OjGRkHiP(1)調 AAS
>>880
スレタイ読めない馬鹿w
882: 06/02(月)19:50 ID:K2UVQp3e(1)調 AAS
>>614
ひとつのモジュールにはひとつの役割を
ひとつのプロシージャにもひとつの役割を
与えて書けばいいんじゃない?
もちろん、モジュールとプロシージャでは
与える役割が全然変わってくるけど

例えばモジュールに車という役割を与えたら
プロシージャには走る役割を与えたり

後はセンス
883: 06/02(月)20:06 ID:Xhmb9taU(1/2)調 AAS
ありがとうございます
やはり on error goto ラベル名 なのですね
884
(1): 06/02(月)20:25 ID:gI3jZeU7(1)調 AAS
on error resume next
ヤバそうな処理
if err.number<>0 then
エラーリカバリー
end if
on error goto0
885: 06/02(月)20:45 ID:Xhmb9taU(2/2)調 AAS
>>884
エラーが発生している、あるいはしそうな処理がある、というよりは、マクロ実行中にどんなバグでも発生したら、発生した時点で終了させる必要があります
886: 06/02(月)21:35 ID:nQl9pEtd(1)調 AAS
終了前に
err.number = エラー番号
をセットしてジャンプさせるハンドラがいる
こわー
887: 06/02(月)22:06 ID:ZCDsMgZ+(1)調 AAS
Sub Div0()
On Error GoTo Err
MsgBox 1 / 1
MsgBox 1 / 0
MsgBox 1 / -1
Err:
MsgBox "ゼロで割るな、クソが"
End
End Sub
888: 06/02(月)22:26 ID:ncJUEcFA(1)調 AAS
Err: の前で Exit Sub しないと
889: 06/03(火)07:35 ID:o/OLh2ct(1)調 AAS
異常が起きる前にファイル開いてた場合、closeしないで終了してしまうとかある
890
(1): 06/03(火)07:39 ID:/ZJ1mBw3(1/3)調 AAS
VBAのツール作りは時間がかかるのが当たり前でしょうか?
作り方は分かっているし、作るツールもたいしたものではないのに、それでも1日2日では終わらないです
891: 06/03(火)10:48 ID:Kk3A2bVT(1/2)調 AAS
ものによる、人による、まともにテストしてるかにもよる
892: 06/03(火)10:57 ID:Q0vXXWY4(1)調 AAS
どうせ著作権侵害や不正アクセスツールだろ
893: 06/03(火)19:25 ID:gpacmpqZ(1/2)調 AAS
>>890
まぁそうだね
だから綺麗に部品化しておくことが大事なんだよ
それを後で使い回せるようにね
894
(2): 06/03(火)20:26 ID:/ZJ1mBw3(2/3)調 AAS
自分が勤めている会社で理解者や協力者を増やそうと、少しでもVBAに興味を示した人や、VBAを齧っている人を相手に勉強会を開催しても、結局VBAがわかる人は少ない
という話を聞きますが、やっぱりVBAといえど、難しいのでしょうか?
Power Queryでもそういう話を聞きます
895: 06/03(火)21:02 ID:cgHky4oh(1)調 AAS
VBAが難しくないんだったらさっさとVBA卒業して本職のITエンジニアになった方が稼げるからねえ
向上心がありすぎてもいけない、中途半端なツールなので
896: 06/03(火)21:09 ID:Kk3A2bVT(2/2)調 AAS
チンタラ残業代稼いでる人にとって効率化は最大の敵
VBAにしろRPAにしろ最大の抵抗勢力よ
897
(6): 06/03(火)22:04 ID:gr7bEf2i(1)調 AAS
>>872 で愚痴って終わりなのもアレだから一応書いとく

・事象
 FileSystemObject.TextStream.ReadLine と ADODB.Stream.ReadText(adReadLine) が同じ結果にならない

・原因
 改行コードが CRLF と LF が混じったお行儀のよろしくないファイルだった

・対処
 LineSeparator = adLF として Replace(ReadText(adReadLine), vbCr, "")
 とやったらOKだった
898
(1): 06/03(火)23:26 ID:aKU11sxP(1)調 AAS
>>897
Microsoftのマニュアルよりも詳しい説明
ADODB.Stream: https://atsumitm.iobb.net/its/its-050.php
TextStream:  https://atsumitm.iobb.net/its/its-051.php
899
(1): 06/03(火)23:46 ID:gpacmpqZ(2/2)調 AAS
>>894
VBAは比較的間口が広くてとっつき易い言語ではあるとは思うよ
ただ、何の言語でもそうだけど教える人がいると受動的になりがちで聞いてりゃ分かるようになると思ってしまうのはマズい
聞いてりゃ分かるようになる言語なんて存在しない
分かる人が少ないのは結局、VBAを本当に必要であることを迫られる立場に無いからだと思う
VBA出来なきゃ今いる会社をクビになるくらいに迫られたら大概の人は理解する
でも教えてくれる人がいるということは恵まれたことだと思うよ
このスレにいる大多数の人は恐らく独学で仕事場で使えるようにならざるを得なかった立場なんじゃないかな
900
(1): 06/03(火)23:58 ID:/ZJ1mBw3(3/3)調 AAS
>>899
私も完全独学で覚えました
というプログラミングは独学で学んでいる人ばかりではないのですか?
プログラミングスクールは役に立たないし、かと言って会社は教えてくれない
901: 897 06/04(水)00:06 ID:/Ak3M73b(1)調 AAS
>>898
このサイトぐぐるとよく見かけるようになったけど、詳しすぎて理解できないw
902: 06/04(水)00:40 ID:b8XC2mTd(1)調 AAS
自学できない人はダメだよね
1-
あと 100 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s