ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
Excel VBA 質問スレ Part82
https://mevius.5ch.net/test/read.cgi/tech/1737657075/1
Excel VBA 質問スレ Part83
■ このスレッドは過去ログ倉庫に格納されています
2025/06/08(日) 11:06:42.20ID:j4jIPbHU
386デフォルトの名無しさん
2025/07/08(火) 10:53:17.46ID:Lf/Jcjxk 馬鹿の上塗り
387デフォルトの名無しさん
2025/07/08(火) 16:04:18.48ID:J6qvAQ9A このスレ沼しか居ねぇな…google ai studioの方がまだ良い解答してくれんぞ…
388デフォルトの名無しさん
2025/07/08(火) 17:01:18.70ID:G3ulfBZW >>387
とても鋭い視点です。さすがですね!
とても鋭い視点です。さすがですね!
389デフォルトの名無しさん
2025/07/08(火) 17:33:24.49ID:BCBq8ImS studio と名付けられてる意味わかってんのかな?
中の人はGeminiそのものらしいじゃんか
中の人はGeminiそのものらしいじゃんか
390デフォルトの名無しさん
2025/07/08(火) 17:42:58.67ID:yBGpSZNW >>389
その論理だとChromeとChrome OSも比較できないことになるが?
同じモデル使ってても実装・UI・機能が違えば体験は全然違うぞ
StudioはAPI統合やパラメータ調整できる開発者向けツール、コンシューマー版Geminiとは設計思想が違う
「中の人が同じ」で比較無意味論は技術理解が浅すぎる
387の解答品質指摘は妥当な比較対象だし、実際のユーザー体験差を無視してる時点で的外れ
とAI様が仰せになっている
その論理だとChromeとChrome OSも比較できないことになるが?
同じモデル使ってても実装・UI・機能が違えば体験は全然違うぞ
StudioはAPI統合やパラメータ調整できる開発者向けツール、コンシューマー版Geminiとは設計思想が違う
「中の人が同じ」で比較無意味論は技術理解が浅すぎる
387の解答品質指摘は妥当な比較対象だし、実際のユーザー体験差を無視してる時点で的外れ
とAI様が仰せになっている
391デフォルトの名無しさん
2025/07/08(火) 18:21:34.45ID:urjDQqc8 >>385
どうやらCopilotさんは間違って記憶している模様
> Workbooks.OpenのFormat 6 はカンマ区切りですか?
はい、Excel VBAで使用される Workbooks.Open メソッドの Format:=6 は「カンマ区切り (CSV) 形式」を示します。
これは、テキストファイルを開くときに、フィールド区切り文字としてカンマが使われている場合に指定されます。
> CSVは2じゃないの?
まず結論から言うと:
Format:=2 → タブ区切り(Tab-delimited)
Format:=6 → カンマ区切り(Comma-delimited)
つまり、CSV形式のファイル(カンマ区切り)を読み込むには Format:=6 を使うのが正解です。
w
どうやらCopilotさんは間違って記憶している模様
> Workbooks.OpenのFormat 6 はカンマ区切りですか?
はい、Excel VBAで使用される Workbooks.Open メソッドの Format:=6 は「カンマ区切り (CSV) 形式」を示します。
これは、テキストファイルを開くときに、フィールド区切り文字としてカンマが使われている場合に指定されます。
> CSVは2じゃないの?
まず結論から言うと:
Format:=2 → タブ区切り(Tab-delimited)
Format:=6 → カンマ区切り(Comma-delimited)
つまり、CSV形式のファイル(カンマ区切り)を読み込むには Format:=6 を使うのが正解です。
w
392デフォルトの名無しさん
2025/07/08(火) 18:33:40.30ID:G3ulfBZW うちでは2って教えてくれた
393デフォルトの名無しさん
2025/07/09(水) 08:08:49.40ID:NYgpwKZ5 つまり、開発環境てことだろ? その中のAI部分を担当してるのはGeminiという認識なんだが?
そのGeminiを使ってAI開発に特化した環境を整えてみましたが、何か? っつーのがStudioなのでは?
じゃあ、コンシューマー向けGeminiとStudioの中の人と成り果ててるGeminiと有料版Studioの中の人は
ぜんぶ別人が担当してンのか?
それぞれ精度にランク付けしてて、コンシューマー向けにはBマイナス程度でいいや
StudioならAな その有料版ならA++とかAAAとかでお答えして差し上げろ とか差別化してるん?
Ver違いってならまだ判る 無料なら2.0でいいよ Studioは2.5にしとくか 有料版は3.0β版な
Copilotを多用してる奴に向かってgoogle ai studio(←ぜんぶ小文字なのが何とも)のが優れてる!
っつーお門違いのコンコンチキな放言は許容できるのか?
おなじGemini同士で比較して見せるとかならまだしも
まあ、おれにはどうでもいいんだけど、ブレインストーミングがてらにしたためてみました
そのGeminiを使ってAI開発に特化した環境を整えてみましたが、何か? っつーのがStudioなのでは?
じゃあ、コンシューマー向けGeminiとStudioの中の人と成り果ててるGeminiと有料版Studioの中の人は
ぜんぶ別人が担当してンのか?
それぞれ精度にランク付けしてて、コンシューマー向けにはBマイナス程度でいいや
StudioならAな その有料版ならA++とかAAAとかでお答えして差し上げろ とか差別化してるん?
Ver違いってならまだ判る 無料なら2.0でいいよ Studioは2.5にしとくか 有料版は3.0β版な
Copilotを多用してる奴に向かってgoogle ai studio(←ぜんぶ小文字なのが何とも)のが優れてる!
っつーお門違いのコンコンチキな放言は許容できるのか?
おなじGemini同士で比較して見せるとかならまだしも
まあ、おれにはどうでもいいんだけど、ブレインストーミングがてらにしたためてみました
394デフォルトの名無しさん
2025/07/09(水) 08:48:44.88ID:/UzV6WSq スレ違いの長文とか救えない
395デフォルトの名無しさん
2025/07/09(水) 09:32:08.40ID:EKMDM/sM 391
x 間違って記憶している
o 過學習でアホになった
x 間違って記憶している
o 過學習でアホになった
396デフォルトの名無しさん
2025/07/09(水) 10:08:19.13ID:MuvaPJLR LLMで過学習…?
397デフォルトの名無しさん
2025/07/09(水) 10:36:50.67ID:1h9feY7y 391
x 間違って記憶している
o 円形脱毛症でハゲになった
x 間違って記憶している
o 円形脱毛症でハゲになった
398デフォルトの名無しさん
2025/07/14(月) 13:04:26.89ID:GLg5N4aG https://forest.watch.impress.co.jp/docs/news/2030817.html
「JScript」に代わり「JScript9Legacy」が既定のスクリプトエンジンに ~Windows 11 24H2以降で
「JScript」に代わり「JScript9Legacy」が既定のスクリプトエンジンに ~Windows 11 24H2以降で
399デフォルトの名無しさん
2025/07/15(火) 10:46:15.47ID:1v3q9PKm Windows11の24H2にしたらJScriptが動かない
https://blog.macorin.net/dos-not-work-jscript-on-windows11-24h2/
https://blog.macorin.net/dos-not-work-jscript-on-windows11-24h2/
400デフォルトの名無しさん
2025/07/15(火) 11:19:52.18ID:IENqpxZQ 毎日夜中の定刻に、気象庁Webサイトの2つのページからcsv落として月次集計する、
マクロとPowerQuery使った2×2の4つのブックを
VBS(例:以下)とタスクスケジューラーを使ってやらせてるんだけど、
いい加減、VBS部分を乗り換えるとしたら、
何がとっつきやすいのかな?
PowerShell?
PowerAutomate?
Python?
---例:DLブックを実行させるVBS---
Const WB_PATH = "E:\集計\01_DLファイル\DLブック_地点A.xlsm"
Const PROC_NAME = "DL_Ref"
Dim excelApp
Set excelApp = CreateObject("Excel.Application")
With excelApp
.Visible = False
Dim wb
Set wb = .Workbooks.Open(WB_PATH)
.Run wb.Name & "!" & PROC_NAME
.DisplayAlerts = False
wb.Close
End With
excelApp.Quit
マクロとPowerQuery使った2×2の4つのブックを
VBS(例:以下)とタスクスケジューラーを使ってやらせてるんだけど、
いい加減、VBS部分を乗り換えるとしたら、
何がとっつきやすいのかな?
PowerShell?
PowerAutomate?
Python?
---例:DLブックを実行させるVBS---
Const WB_PATH = "E:\集計\01_DLファイル\DLブック_地点A.xlsm"
Const PROC_NAME = "DL_Ref"
Dim excelApp
Set excelApp = CreateObject("Excel.Application")
With excelApp
.Visible = False
Dim wb
Set wb = .Workbooks.Open(WB_PATH)
.Run wb.Name & "!" & PROC_NAME
.DisplayAlerts = False
wb.Close
End With
excelApp.Quit
401デフォルトの名無しさん
2025/07/15(火) 11:31:18.20ID:izh84eSC >>400
**PowerShell**がおすすめです。
理由:
- VBSに最も近い書き方
- Excelの操作がそのまま使える
- Windowsに標準搭載
- 学習コストが低い
移行例:
```powershell
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$wb = $excel.Workbooks.Open("E:\集計\01_DLファイル\DLブック_地点A.xlsm")
$excel.Run("DL_Ref")
$wb.Close()
$excel.Quit()
```
PythonやPower Automateは学習コストか制約があるので、PowerShellが無難です。
**PowerShell**がおすすめです。
理由:
- VBSに最も近い書き方
- Excelの操作がそのまま使える
- Windowsに標準搭載
- 学習コストが低い
移行例:
```powershell
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$wb = $excel.Workbooks.Open("E:\集計\01_DLファイル\DLブック_地点A.xlsm")
$excel.Run("DL_Ref")
$wb.Close()
$excel.Quit()
```
PythonやPower Automateは学習コストか制約があるので、PowerShellが無難です。
402デフォルトの名無しさん
2025/07/15(火) 11:33:01.33ID:l/eryieH vbsに近いならjsだろう
403デフォルトの名無しさん
2025/07/15(火) 11:52:00.35ID:1v3q9PKm PowerShellは遅くてびっくりするのと
COM(IDispatch)経由の操作なので基本的に書き方はvba/vbsを踏襲する
普通に使うと割とつまらない
COM(IDispatch)経由の操作なので基本的に書き方はvba/vbsを踏襲する
普通に使うと割とつまらない
404デフォルトの名無しさん
2025/07/15(火) 11:53:44.70ID:SjeLYLBh >>400
スレ違い
スレ違い
405デフォルトの名無しさん
2025/07/15(火) 13:45:04.50ID:IENqpxZQ >>401,403
ありがとう。やってみる。
ありがとう。やってみる。
406デフォルトの名無しさん
2025/07/15(火) 18:57:22.18ID:F7nJfSiA やっぱり馬鹿かよ
407デフォルトの名無しさん
2025/07/16(水) 22:35:52.90ID:6RqIkTEU 目的のフォルダを取得する効率的なコードを教えてください
1番効率的なのはフォルダのフルパスそのものを取得する事ですが、それも難しいので各階層の部分一致でお願い致します
1番効率的なのはフォルダのフルパスそのものを取得する事ですが、それも難しいので各階層の部分一致でお願い致します
408デフォルトの名無しさん
2025/07/16(水) 22:45:55.20ID:NiCGeJue パスが流動的ってこと?
指定する以外にやったことないわ
指定する以外にやったことないわ
409デフォルトの名無しさん
2025/07/16(水) 23:01:32.70ID:IRXrFh0B 部分一致が複数あるとして、その順番が入れ替わる可能性があるかどうかでコードが変わるね
410デフォルトの名無しさん
2025/07/17(木) 00:19:01.17ID:zBpNwhAR コード\分類\フォルダ\期間別フォルダ\探したいファイル
みたいな感じですね
みたいな感じですね
411デフォルトの名無しさん
2025/07/17(木) 00:24:00.03ID:Nf2HlQRn412デフォルトの名無しさん
2025/07/17(木) 01:52:47.41ID:gLLqR9ZX >>407
馬鹿は「効率的」は何が効率的なのかとかすら説明できない
馬鹿は「効率的」は何が効率的なのかとかすら説明できない
413デフォルトの名無しさん
2025/07/17(木) 05:21:40.06ID:tC2PFukj 馬鹿じゃなきゃこんなところで聞かない
414デフォルトの名無しさん
2025/07/17(木) 07:17:52.06ID:wYenyBlK こう言うことなんじゃないの? ディレクトリ(フォルダ)名が曖昧な記憶だから
漠然とした検索してファイル見付けたい とかなんじゃ
https://www.limecode.jp/entry/utility/partialmatch-filesearch
3パターン提示してくれてるから、どれでもお好きなもので・若しくは全部使ってもいいし
一年365日ばかしか書けない誰かさんは無視しとけばいいよ
彼は馬鹿と書き込むのがじぶんのDutyだと思い込んでる節があるし 認知の病なんだろうきっと
漠然とした検索してファイル見付けたい とかなんじゃ
https://www.limecode.jp/entry/utility/partialmatch-filesearch
3パターン提示してくれてるから、どれでもお好きなもので・若しくは全部使ってもいいし
一年365日ばかしか書けない誰かさんは無視しとけばいいよ
彼は馬鹿と書き込むのがじぶんのDutyだと思い込んでる節があるし 認知の病なんだろうきっと
415デフォルトの名無しさん
2025/07/17(木) 07:36:40.82ID:rYvcj5zc 彼はこんなとこでしかマウントとれないかわいそうなやつなんだ
そっとしといてあげよう
そっとしといてあげよう
416デフォルトの名無しさん
2025/07/17(木) 07:41:07.22ID:aYpECmLq417デフォルトの名無しさん
2025/07/17(木) 08:47:01.58ID:sGHKyXGW >>410
Dirでワイルドカードが使えるので、こんな感じに仕上げてみた
※ヒットするパスの例 → C:\Documents\A001\B000X1\Excel\20250717\FileABC001.xlsx
HomePath = "C:\Documents"
SearchPath = "A???\B*\Excel\2025????\File*.xlsx"
ResultPath = HomePath
SearchPathList = Split(SearchPath, "\")
For I = 0 To UBound(SearchPathList)
If Dir(ResultPath) <> "" Then
ResultPath = "ファイルの下は何もないよ!"
Exit For
End If
FolderName = Dir(ResultPath & "\" & SearchPathList(I), vbDirectory)
If FolderName = "" Then
ResultPath = "そんなパスはないよ!"
Exit For
End If
ResultPath = ResultPath & "\" & FolderName
Next
MsgBox "これかな?" & vbCrLf & ResultPath
Dirでワイルドカードが使えるので、こんな感じに仕上げてみた
※ヒットするパスの例 → C:\Documents\A001\B000X1\Excel\20250717\FileABC001.xlsx
HomePath = "C:\Documents"
SearchPath = "A???\B*\Excel\2025????\File*.xlsx"
ResultPath = HomePath
SearchPathList = Split(SearchPath, "\")
For I = 0 To UBound(SearchPathList)
If Dir(ResultPath) <> "" Then
ResultPath = "ファイルの下は何もないよ!"
Exit For
End If
FolderName = Dir(ResultPath & "\" & SearchPathList(I), vbDirectory)
If FolderName = "" Then
ResultPath = "そんなパスはないよ!"
Exit For
End If
ResultPath = ResultPath & "\" & FolderName
Next
MsgBox "これかな?" & vbCrLf & ResultPath
418デフォルトの名無しさん
2025/07/17(木) 09:28:10.58ID:TqONBLPd あたしゃ、ディレクトリ関係は「見える」の重視で、このあたり参考にしてワークシート関数でやっちゃうけど
https://qwerty.work/blog/2021/01/excel-function-path.php
https://qwerty.work/blog/2021/01/excel-function-path.php
419デフォルトの名無しさん
2025/07/17(木) 20:37:37.93ID:zBpNwhAR >>417
正規表現の様な事ができたのでしょうか?
正規表現の様な事ができたのでしょうか?
420デフォルトの名無しさん
2025/07/17(木) 20:38:38.98ID:zBpNwhAR >>416
例えばファイルシステムオブジェクトの再帰処理で全フォルダをループしてしまうのは非効率だなぁという事です
例えばファイルシステムオブジェクトの再帰処理で全フォルダをループしてしまうのは非効率だなぁという事です
421デフォルトの名無しさん
2025/07/17(木) 21:05:30.67ID:zBpNwhAR >>417
本当に複数の階層で部分一致できますでしょうか?
本当に複数の階層で部分一致できますでしょうか?
422デフォルトの名無しさん
2025/07/17(木) 23:17:21.95ID:mypLb9KX 釣りでなければ真正馬鹿で確定
423デフォルトの名無しさん
2025/07/17(木) 23:26:46.72ID:DMF1qliv Chatさん。未検証
再帰使わずキュー処理
Sub FastSearchMinimal()
Dim fso As Object, q As Collection, f As Object, i As Object
Dim r As Long: r = 2
Dim k As String: k = "sample"
Set fso = CreateObject("Scripting.FileSystemObject")
Set q = New Collection: q.Add fso.GetFolder("C:\TestFolder")
With Sheets(1): .Cells.Clear: .Range("A1:C1").Value = Array("種類", "名前", "パス"): End With
Do While q.Count > 0
Set f = q(1): q.Remove 1
For Each i In f.SubFolders: q.Add i: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "フォルダ", i.Name, i.Path
Next
For Each i In f.Files: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "ファイル", i.Name, i.Path
Next
Loop
MsgBox "完了"
End Sub
Sub WriteRow(ByRef r As Long, t As String, n As String, p As String)
With Sheets(1): .Cells(r, 1).Resize(1, 3).Value = Array(t, n, p): End With: r = r + 1
End Sub
再帰使わずキュー処理
Sub FastSearchMinimal()
Dim fso As Object, q As Collection, f As Object, i As Object
Dim r As Long: r = 2
Dim k As String: k = "sample"
Set fso = CreateObject("Scripting.FileSystemObject")
Set q = New Collection: q.Add fso.GetFolder("C:\TestFolder")
With Sheets(1): .Cells.Clear: .Range("A1:C1").Value = Array("種類", "名前", "パス"): End With
Do While q.Count > 0
Set f = q(1): q.Remove 1
For Each i In f.SubFolders: q.Add i: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "フォルダ", i.Name, i.Path
Next
For Each i In f.Files: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "ファイル", i.Name, i.Path
Next
Loop
MsgBox "完了"
End Sub
Sub WriteRow(ByRef r As Long, t As String, n As String, p As String)
With Sheets(1): .Cells(r, 1).Resize(1, 3).Value = Array(t, n, p): End With: r = r + 1
End Sub
424デフォルトの名無しさん
2025/07/18(金) 03:56:36.13ID:kCxulfmG 若い子はChatGPTのことチャッピーと呼んでる
425デフォルトの名無しさん
2025/07/18(金) 08:09:47.41ID:JhLn+KYd Sub 探す()
Dim fso As Object,root As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' ルートフォルダを取得して再帰処理スタート
Set root = fso.GetFolder("パス")
再帰処理 root
End Sub
'―――――――――――――――――――――――――――――――
Private Sub 再帰処理( ByVal f As Object)
Dim file as Object,fpath as string
If Instr(f.name,"目的") > 0 Then
' ファイルをチェック
For Each file In f.Fileso
If InStr(file.Name,"検索値") > 0 Then fpath = file.path
Next
End if
Dim sf as Object
' サブフォルダを再帰処理
For Each sf In f.SubFolders
If Instr(sf.name,"コード") > 0 or Instr(sf.name,"書類") > 0 or Instr(sf.name,"分類") > 0 or Instr(sf.name,"yyyymmdd") > 0 Then 再帰処理 sf
Next
End Sub
Dim fso As Object,root As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' ルートフォルダを取得して再帰処理スタート
Set root = fso.GetFolder("パス")
再帰処理 root
End Sub
'―――――――――――――――――――――――――――――――
Private Sub 再帰処理( ByVal f As Object)
Dim file as Object,fpath as string
If Instr(f.name,"目的") > 0 Then
' ファイルをチェック
For Each file In f.Fileso
If InStr(file.Name,"検索値") > 0 Then fpath = file.path
Next
End if
Dim sf as Object
' サブフォルダを再帰処理
For Each sf In f.SubFolders
If Instr(sf.name,"コード") > 0 or Instr(sf.name,"書類") > 0 or Instr(sf.name,"分類") > 0 or Instr(sf.name,"yyyymmdd") > 0 Then 再帰処理 sf
Next
End Sub
426デフォルトの名無しさん
2025/07/18(金) 08:22:30.72ID:avd6O0J8 >>417 はちょっと手抜きしてたので、ちゃんと作り直した。
Sub 使い方()
Set Result = New Collection
DirMulti "C:\Documents", "A???\B*\Excel\2025????\File*.xlsx", Result, vbNormal
(以下略)
End Sub
Sub DirMulti(HomePath, SearchPath, ResultCollection, Optional Attributes As VbFileAttribute = vbNormal)
Pos = InStr(SearchPath & "\", "\")
Search = Left(SearchPath, Pos - 1)
NextSearch = Mid(SearchPath, Pos + 1)
Set SearchResult = New Collection
Res = Dir(HomePath & "\" & Search, vbDirectory Or Attributes)
Do While Res <> ""
If Res <> "." And Res <> ".." Then SearchResult.Add Res
Res = Dir()
Loop
If NextSearch = "" Then
For Each Res In SearchResult
ResultCollection.Add HomePath & "\" & Res
Next
Else
For Each Res In SearchResult
If (GetAttr(HomePath & "\" & Res) And vbDirectory) <> 0 Then
DirMulti HomePath & "\" & Res, NextSearch, ResultCollection, Attributes
End If
Next
End If
End Sub
Sub 使い方()
Set Result = New Collection
DirMulti "C:\Documents", "A???\B*\Excel\2025????\File*.xlsx", Result, vbNormal
(以下略)
End Sub
Sub DirMulti(HomePath, SearchPath, ResultCollection, Optional Attributes As VbFileAttribute = vbNormal)
Pos = InStr(SearchPath & "\", "\")
Search = Left(SearchPath, Pos - 1)
NextSearch = Mid(SearchPath, Pos + 1)
Set SearchResult = New Collection
Res = Dir(HomePath & "\" & Search, vbDirectory Or Attributes)
Do While Res <> ""
If Res <> "." And Res <> ".." Then SearchResult.Add Res
Res = Dir()
Loop
If NextSearch = "" Then
For Each Res In SearchResult
ResultCollection.Add HomePath & "\" & Res
Next
Else
For Each Res In SearchResult
If (GetAttr(HomePath & "\" & Res) And vbDirectory) <> 0 Then
DirMulti HomePath & "\" & Res, NextSearch, ResultCollection, Attributes
End If
Next
End If
End Sub
427デフォルトの名無しさん
2025/07/18(金) 09:23:27.37ID:J+L+9run 要件定義せず走り出すとこうなるという見本
428デフォルトの名無しさん
2025/07/18(金) 10:47:27.74ID:kfpMJi4P ま、それぞれがこれに取り組むことで、それなり成長する(こともある)んだから、いいじゃん
外野から思索も模索もせずにつべこべ小言書くことしかできないご老体には言わせときゃいいだけ
相談者、夜中にしか出張って来ないから、日中に迷走するのはやむを得ない
やりたいことは何となく見えてきたけど、それをどう実装したいのか?誰に使わせたいのか?何のために作るのか?
とかがイマイチ漠然としてて、方向ぐらいは提示して欲しいのはある
エクスプローラー開いて検索じゃあダメな理由とか、ファイルじゃ無くてフォルダ(名)に拘ってるように読めて
例えば、各々が勝手にフォルダ作ってファイル放り込んでるのを是正したいんだ、とかなのか
もう一歩踏み込んだ相談が出て来るまで待機、も有り得る
外野から思索も模索もせずにつべこべ小言書くことしかできないご老体には言わせときゃいいだけ
相談者、夜中にしか出張って来ないから、日中に迷走するのはやむを得ない
やりたいことは何となく見えてきたけど、それをどう実装したいのか?誰に使わせたいのか?何のために作るのか?
とかがイマイチ漠然としてて、方向ぐらいは提示して欲しいのはある
エクスプローラー開いて検索じゃあダメな理由とか、ファイルじゃ無くてフォルダ(名)に拘ってるように読めて
例えば、各々が勝手にフォルダ作ってファイル放り込んでるのを是正したいんだ、とかなのか
もう一歩踏み込んだ相談が出て来るまで待機、も有り得る
429デフォルトの名無しさん
2025/07/18(金) 16:30:22.97ID:aPZeO8n7 VBAの作り方が上手すぎて情シスに異動させられそうになったセンスの塊こと俺だけどよく構文を知ってるとかテキスト通りにとか気にしてる奴は3流よ
使用者の使いやすさにまず全振り
次に拡張性を気にすりゃメンテナンスもしやすくなる
エラー回避しない奴は論外
でも結局はどう動かすかなんよ
使用者の使いやすさにまず全振り
次に拡張性を気にすりゃメンテナンスもしやすくなる
エラー回避しない奴は論外
でも結局はどう動かすかなんよ
430デフォルトの名無しさん
2025/07/18(金) 16:43:02.04ID:AbgnUBWx Aという処理をVBAでさせようってお手本みたいなコードを書いてもそのA自体にセンスが無い奴が多いんだよな
それが役職も評価も年収も上がらないVBAを勉強しただけのおぢさん
それが役職も評価も年収も上がらないVBAを勉強しただけのおぢさん
431デフォルトの名無しさん
2025/07/18(金) 17:25:18.33ID:kfpMJi4P >>427 読み直したら、ID末尾runだけに?
432デフォルトの名無しさん
2025/07/18(金) 18:03:06.70ID:tx5irUc8 >>431
みんながみんなエスパーしながら好きに書いてる何を読み直すの?
みんながみんなエスパーしながら好きに書いてる何を読み直すの?
433デフォルトの名無しさん
2025/07/18(金) 20:55:57.57ID:kfpMJi4P わかんなきゃいいよw カリカリすんなよ
フォルダ名を取得する記事見付けた 検索文字で絞る事もできる *とか?とかも要らん
https://tmkr7788.livedoor.blog/archives/26830287.html
で、一番上のフォルダ指定するのが手入力っぽいから、それも自動取得するなら
Sub Sample()
Dim FPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\ほにゃらら"
.Title = "フォルダを選択してください"
If .Show = -1 Then
FPath = .SelectedItems(1)
End If
End With
Cells(3,3) = FPath
End Sub
これを別ボタンに貼り付ければ、ディレクトリ探すのもマウスオペだけで済む お好みだけど
※ ほにゃらら部分は、デフォルトで指定しときたいフォルダ名に
フォルダ名を取得する記事見付けた 検索文字で絞る事もできる *とか?とかも要らん
https://tmkr7788.livedoor.blog/archives/26830287.html
で、一番上のフォルダ指定するのが手入力っぽいから、それも自動取得するなら
Sub Sample()
Dim FPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\ほにゃらら"
.Title = "フォルダを選択してください"
If .Show = -1 Then
FPath = .SelectedItems(1)
End If
End With
Cells(3,3) = FPath
End Sub
これを別ボタンに貼り付ければ、ディレクトリ探すのもマウスオペだけで済む お好みだけど
※ ほにゃらら部分は、デフォルトで指定しときたいフォルダ名に
434デフォルトの名無しさん
2025/07/18(金) 21:22:07.30ID:VbDqcBb9435デフォルトの名無しさん
2025/07/19(土) 04:46:02.20ID:s8PmOx3D >>45
え、Accessは2027年で使えなくなるの!?
え、Accessは2027年で使えなくなるの!?
436デフォルトの名無しさん
2025/07/19(土) 06:29:44.25ID:QjhfSjEw >>433
馬鹿
馬鹿
437デフォルトの名無しさん
2025/07/19(土) 07:33:32.95ID:xtuIEHIA438デフォルトの名無しさん
2025/07/19(土) 08:03:25.99ID:hkkuRgMQ 昨日初めてwin12て使ってる記事見たわ
439デフォルトの名無しさん
2025/07/19(土) 09:32:36.51ID:S5W6kZB3 指定したフォルダ以下の、サブフォルダとファイルを取得する記事も見付けた
>>433 のは、フォルダのみだけど、その中身もそのファイル情報も見れるのはいい
何よりシンプル 開きたい場合は上のを参考にすればいいと思う
https://akira55.com/showfoldertree/
ExcelにTreeViewって無かったっけ?とか思い直してググってて辿り着いた
TreeViewを実装しようと試みて、みんな大好きTANAKAさんのサイト参考にしようとしたら
Form上に配置するのに、その他のコントロールから選ばなきゃならなく成ってて
ImageListに至っては追加はできてもプロパティ変更しようとするとエラー 64bitのせい?
TANAKAの例はExcel2003で説明してるからなのか もはやオワコンなのか なぞ
まぁ、後日のメンテとかも面倒そうだから、Sheet上に書き出すのがいちばん楽なんだろうな
>>433 のは、フォルダのみだけど、その中身もそのファイル情報も見れるのはいい
何よりシンプル 開きたい場合は上のを参考にすればいいと思う
https://akira55.com/showfoldertree/
ExcelにTreeViewって無かったっけ?とか思い直してググってて辿り着いた
TreeViewを実装しようと試みて、みんな大好きTANAKAさんのサイト参考にしようとしたら
Form上に配置するのに、その他のコントロールから選ばなきゃならなく成ってて
ImageListに至っては追加はできてもプロパティ変更しようとするとエラー 64bitのせい?
TANAKAの例はExcel2003で説明してるからなのか もはやオワコンなのか なぞ
まぁ、後日のメンテとかも面倒そうだから、Sheet上に書き出すのがいちばん楽なんだろうな
440デフォルトの名無しさん
2025/07/19(土) 10:05:18.56ID:TEpbrrsS >>437
きっとwin11はwindowsではない新種のOSなんだろう
きっとwin11はwindowsではない新種のOSなんだろう
441デフォルトの名無しさん
2025/07/19(土) 15:57:41.07ID:ZTd2BQVd >>439
実行結果のファイルうpしてみて
実行結果のファイルうpしてみて
442デフォルトの名無しさん
2025/07/19(土) 16:20:49.62ID:A8cbKdEJ パス長いとかいい加減にしろとな
443デフォルトの名無しさん
2025/07/19(土) 16:52:52.55ID:S5W6kZB3444デフォルトの名無しさん
2025/07/20(日) 12:26:16.14ID:UYPMBFMH 見られて困るものだらけのPCって犯罪的な?
445デフォルトの名無しさん
2025/07/23(水) 07:42:55.14ID:jnXMDL+k >>429
その様にコードを書いてマクロを作成するのに何日くらいかかりますか?
その様にコードを書いてマクロを作成するのに何日くらいかかりますか?
446デフォルトの名無しさん
2025/07/23(水) 08:46:08.98ID:Rz/tc4F0 回避ルートが無い場合はエラーで止まる分は放置だな
下手なメッセージ出して止まるより分かりやすい
下手なメッセージ出して止まるより分かりやすい
447デフォルトの名無しさん
2025/07/23(水) 10:53:39.46ID:S2JD2z+w448デフォルトの名無しさん
2025/07/23(水) 19:11:51.35ID:jnXMDL+k449デフォルトの名無しさん
2025/07/23(水) 20:20:01.08ID:jSDoEOvR コメントは最低限しか書かないなあ
リファクタリングしまくって、コメント書かなくてもわかるコードにする方がいいと思う
1〜2日で作成したら、最低1週間はリファクタリング期間
リファクタリングしまくって、コメント書かなくてもわかるコードにする方がいいと思う
1〜2日で作成したら、最低1週間はリファクタリング期間
450デフォルトの名無しさん
2025/07/23(水) 21:02:26.59ID:3kQj9G/6 規模感がちょっとわからないけどテスト込みで手直し1週間?
451デフォルトの名無しさん
2025/07/23(水) 21:55:41.80ID:jSDoEOvR 規模はまちまちだけど、この例ではテスト込みで作成1〜2日
完成後1週間は毎日コードを読み直す時間をとる
すると何かしら改善点が見つかる
毎日読んでも何にも改善点なく1週間過ぎたらステーブル
完成後1週間は毎日コードを読み直す時間をとる
すると何かしら改善点が見つかる
毎日読んでも何にも改善点なく1週間過ぎたらステーブル
452デフォルトの名無しさん
2025/07/24(木) 21:58:34.96ID:GZnFTazm 複数のシートをpdf出力したいのです。
wb.Sheets(arr).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
の様に、ActiveSheetで指定するしか方法はないのでしょうか?
ActiveSheetは明示的でないので避けたいです
wb.Sheets(arr).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
の様に、ActiveSheetで指定するしか方法はないのでしょうか?
ActiveSheetは明示的でないので避けたいです
453デフォルトの名無しさん
2025/07/24(木) 22:07:09.88ID:CXis1mnI >>452
wb.Sheets(arr).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
wb.Sheets(arr).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
454デフォルトの名無しさん
2025/07/24(木) 22:09:24.06ID:GZcfs+u1 >>452
まずはAIに聞く癖を付けろ
以下の方法でActiveSheetを使わずに複数シートをPDF出力できます:
```vb
wb.Worksheets(arr).ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=pdfPath
```
`wb.Worksheets(arr)`で直接シートコレクションを指定すれば、ActiveSheetに依存せずに済みます。
まずはAIに聞く癖を付けろ
以下の方法でActiveSheetを使わずに複数シートをPDF出力できます:
```vb
wb.Worksheets(arr).ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=pdfPath
```
`wb.Worksheets(arr)`で直接シートコレクションを指定すれば、ActiveSheetに依存せずに済みます。
455デフォルトの名無しさん
2025/07/24(木) 22:21:03.69ID:3SMUfFNx ↓は実行できるけど、
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select
↓はエラーにならね?
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select
↓はエラーにならね?
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
456デフォルトの名無しさん
2025/07/24(木) 22:52:04.71ID:GZnFTazm >>454
はい、AIは大嘘つき
はい、AIは大嘘つき
457デフォルトの名無しさん
2025/07/24(木) 22:52:55.23ID:GZnFTazm >>453
無理でーす
無理でーす
458デフォルトの名無しさん
2025/07/24(木) 22:53:12.34ID:GZnFTazm >>455
正解!
正解!
459デフォルトの名無しさん
2025/07/24(木) 22:57:55.91ID:GZnFTazm wb.Sheets(配列).Select
ActiceSheet..ExportAsFixedFormat Type:=xlTypePDF, Filename:=Path
でしかエラーになります
ActiceSheet..ExportAsFixedFormat Type:=xlTypePDF, Filename:=Path
でしかエラーになります
460デフォルトの名無しさん
2025/07/25(金) 01:14:02.16ID:f/mD0P8I >>452
Selectが必要なことに変わりはないがActiveSheetを排除したいのならこう書ける
wb.Sheets(arr).Select
wb.Sheets(arr(0)).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
Selectが必要なことに変わりはないがActiveSheetを排除したいのならこう書ける
wb.Sheets(arr).Select
wb.Sheets(arr(0)).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
461デフォルトの名無しさん
2025/07/25(金) 01:45:35.35ID:YmqTu82J >>460
それは複数シートではなく、単一のシートですよな
それは複数シートではなく、単一のシートですよな
462デフォルトの名無しさん
2025/07/25(金) 07:52:00.89ID:UfHu+jPG 変数使ってループさせるくらいの頭働かせられないくらい頭沸いちゃったのかな
暑いからね
暑いからね
463デフォルトの名無しさん
2025/07/25(金) 08:02:36.99ID:YmqTu82J >>462
複数のシートを個別のpdfファイルにエクスポート、ではないです
複数のシートを1つのpdfファイルに、です
これの方法がActiceSheet.ExportAsFixedFormatしか見つからなくて、ActiceSheetの様な曖昧な指定は嫌だなぁと思うのです
複数のシートを個別のpdfファイルにエクスポート、ではないです
複数のシートを1つのpdfファイルに、です
これの方法がActiceSheet.ExportAsFixedFormatしか見つからなくて、ActiceSheetの様な曖昧な指定は嫌だなぁと思うのです
464デフォルトの名無しさん
2025/07/25(金) 08:22:07.09ID:JviM2itp ActiveSheetを明示するだけでしょ
今のActiveSheetをテンポラリに持っておいて、
特定のシートをActivate
それを書き出した後テンポラリをActivate
今のActiveSheetをテンポラリに持っておいて、
特定のシートをActivate
それを書き出した後テンポラリをActivate
465デフォルトの名無しさん
2025/07/25(金) 08:40:06.97ID:f/mD0P8I >>461
選択中のどれかのシートをエクスポートすれば選択シートすべてが出力される不思議仕様
選択中のどれかのシートをエクスポートすれば選択シートすべてが出力される不思議仕様
466デフォルトの名無しさん
2025/07/25(金) 09:10:21.07ID:6JkrjnZc ActiveSheetはワークシート(単・複数)へのポインタみたいなものだよ
シートを省略して書かれたメソッドは常にActiveSheetを対象操作にする
シートを省略して書かれたメソッドは常にActiveSheetを対象操作にする
467デフォルトの名無しさん
2025/07/25(金) 12:31:12.82ID:YmqTu82J そうだったんですか
wb.Sheets(arr).Select
〜中略〜
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
と書いたにも関わらず、何故か出力されたpdfが1シートのみ
という事があって、もしかしてcopy modeの様に、ちょっとした操作でシートのグループ化が解除されるのかなと思いました。
wb.Sheets(arr).Select
〜中略〜
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
と書いたにも関わらず、何故か出力されたpdfが1シートのみ
という事があって、もしかしてcopy modeの様に、ちょっとした操作でシートのグループ化が解除されるのかなと思いました。
468デフォルトの名無しさん
2025/07/25(金) 12:41:13.91ID:7k67EuH4 そりゃ解除されるよ
選択していないシートをアクティベートしたりね
ユーザー操作で違和感なく動作するのが大前提だから
選択していないシートをアクティベートしたりね
ユーザー操作で違和感なく動作するのが大前提だから
469デフォルトの名無しさん
2025/07/25(金) 18:16:56.05ID:O3RmL+0a470デフォルトの名無しさん
2025/07/25(金) 20:45:59.47ID:6JkrjnZc VBの内部コード(Pコード)は解析されてるのかな
AIに全部ぶち込んでしまえば、どういう理屈でという疑問は解消しそうだけど
AIに全部ぶち込んでしまえば、どういう理屈でという疑問は解消しそうだけど
471デフォルトの名無しさん
2025/07/26(土) 08:11:28.23ID:ZNo9mvnh wb.Sheets(arr).Select
wb.Sheets(2).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
でもグループ化したシートが出力できるのですね
今知りました
でも怖いですね
wb.Sheets(2).Selectはグループ化解除だから
wb.Sheets(2).ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
でもグループ化したシートが出力できるのですね
今知りました
でも怖いですね
wb.Sheets(2).Selectはグループ化解除だから
472デフォルトの名無しさん
2025/07/26(土) 13:26:56.16ID:8rv+r4rK 名前付き引数書く派なんだなおまいらも
473デフォルトの名無しさん
2025/07/26(土) 14:28:31.18ID:F1jFmomB ExportAsFixedFormat xlTypePDF, pdfPath,,,,,,
名前を覚えるか糞長引数の位置を覚えるかのトレードオフ
名前を覚えるか糞長引数の位置を覚えるかのトレードオフ
474デフォルトの名無しさん
2025/07/26(土) 15:15:43.28ID://AUV0sR 別にどちらでもいい
475デフォルトの名無しさん
2025/07/26(土) 17:35:17.71ID:UKLeI2W+ どっちの書式も覚えてない
検索で上位に出てきたコードをコピペするだけ
検索で上位に出てきたコードをコピペするだけ
476デフォルトの名無しさん
2025/07/28(月) 17:59:42.76ID:vQ0dL+ep 一次配列しか対応していないからFilter関数を避けてきましたが、worksheet関数で一次配列に簡単に直せるのと、Filter関数は部分一致なので、ループで重ねがけをするととても便利ですね。
477デフォルトの名無しさん
2025/07/28(月) 18:28:01.59ID:23Svm7lo ネット検索でコピペ
実際はこんなのが大半なんだよな
実際はこんなのが大半なんだよな
478デフォルトの名無しさん
2025/07/28(月) 23:33:08.81ID:/EYYRyt0 部署内と提携仕入先でVBAで金かけずに簡易システムの共同開発ってことで
メール本文にプロシージャ貼って相手に送ってる
相手からうまく動きました、こっちもこうしてほしいですと回答がくる また直したのをメールに貼って送る
なんという原始的な外資企業だよ
メール本文にプロシージャ貼って相手に送ってる
相手からうまく動きました、こっちもこうしてほしいですと回答がくる また直したのをメールに貼って送る
なんという原始的な外資企業だよ
479デフォルトの名無しさん
2025/07/28(月) 23:37:37.11ID:ofRNtrsX 草
480デフォルトの名無しさん
2025/07/29(火) 12:30:27.63ID:cpAOUjwH できることからコツコツと
ですよ
マニアでもいないと飛躍しない
責任取らされるかもと思えば何もしない
ですよ
マニアでもいないと飛躍しない
責任取らされるかもと思えば何もしない
481デフォルトの名無しさん
2025/07/29(火) 19:57:27.87ID:G836h0I1 vbaではfor のループ処理で条件に一致しないときはループをスキップ(次へ)が出来ないと聞きます
なんとかif文のnot then の時はスキップみたいなコードを書いていますがなかなか難しいです
AIはGo To文を書いているので私も書いていいでしょうか?
なんとかif文のnot then の時はスキップみたいなコードを書いていますがなかなか難しいです
AIはGo To文を書いているので私も書いていいでしょうか?
482デフォルトの名無しさん
2025/07/29(火) 19:59:00.98ID:wqm1/dtV whileとか使えば?
483デフォルトの名無しさん
2025/07/29(火) 20:10:20.21ID:G836h0I1 >>482
whileもDoもしっかりと理解しておかないと無限列車編になりそうで怖いです
仮にもしIf not 〜 Then Next
と言う様なコードがあったとしてもそれが事実上のGo To文だと言われたらそうなのかもしれません
whileもDoもしっかりと理解しておかないと無限列車編になりそうで怖いです
仮にもしIf not 〜 Then Next
と言う様なコードがあったとしてもそれが事実上のGo To文だと言われたらそうなのかもしれません
484デフォルトの名無しさん
2025/07/29(火) 20:24:56.02ID:cpAOUjwH continueが無いと言うことなら
goto continue
はわかりやすく代替になる
ネストあるしでオレの場合は
LBL_CONTINUE_10:
とかにしてるけど
goto continue
はわかりやすく代替になる
ネストあるしでオレの場合は
LBL_CONTINUE_10:
とかにしてるけど
485デフォルトの名無しさん
2025/07/29(火) 20:27:33.99ID:J9oCD99i >>483
馬鹿には難しいのか?
馬鹿には難しいのか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 自閉症が「んなっしょい」と連呼するお🏡
- 現役猟師・俳優 東出昌大が語る「クマはそんな危ないもんじゃない」
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
- 日本人の海外旅行したきのマナーよくなったのはいつから
- へそグリグリ
