Visual Basic
- なんとなくの質問ですが。。。
Ontime、、、のvbaで、よく止まったりする気がする。 考えられるコードミスはありますか? よくある、、こんなことあった!昔。みたいな 体験談が、聞きたいです。
- ベストアンサー
- Visual Basic
- ゆず
- 回答数1
- PADによるメール添付資料自動保存
PADでメールの添付資料を自動保存しております。 更に発展的に使用したいのですが、以下のようなことは可能でしょうか? ①メール件名に、ABABと記載があれば、ファイル名にもABABと追加する ②メールアドレスの@以下で送付してきた企業を判断し、企業名をファイルにいれる 結構高度な知識が必要ですか?
- 締切済み
- Visual Basic
- tack8rou40
- 回答数1
- VBA Exit Subが機能しない
以下のVBAコードが正常に機能しません。 Sub A() 処理 On Error Goto L1 処理 On Error Goto L2 処理 Exit Sub L1: MsgBox エラーメッセージ1 Exit Sub L2: MsgBox エラーメッセージ2 Exit Sub End Sub これを実行すると、エラーが出ておらず、正常に処理が行われているのに、エラーメッセージ2が表示されます。 間違いを指摘してください。
- 締切済み
- Visual Basic
- NKM_Chitose
- 回答数2
- VBA 配列 条件分岐で編集して別の配列に格納
いつもありがとうございます。 VBAの配列を編集して、別の配列に格納出来なくて困ってます。ネットとかで確認しながら色々試してるのですが、うまくいきません。 8列目の値が2の時、対象行の内容を別の配列にコピーする方法です。 すみませんが教えて貰えないでしょうか?よろしくお願いします。
- ベストアンサー
- Visual Basic
- hidenori-world
- 回答数5
- フォルダ監視vba
下記、20秒置きにフォルダを監視し、変化があればバックアップのファイルを発動させるマクロを組みました。エクセルを開くとマクロは動くようにしています。初めは動いているのですが、途中から動きません。監視してるフォルダに、ファイルを増やしても、反応がありません。どこかおかしな点、わかる方教えていただけないでしょうか。 Option Explicit Dim previousFiles As Collection Sub StartMonitoring() ' 初回実行時にファイルリストを取得 Set previousFiles = GetFileList() Application.OnTime Now + TimeValue("00:00:20"), "MonitorFolder" End Sub Sub MonitorFolder() Dim currentFiles As Collection Dim fileName As Variant Dim fileAdded As Boolean Dim file As Variant Dim fileArray() As Variant Dim i As Integer fileAdded = False Set currentFiles = GetFileList() ' Collection を配列に変換 ReDim fileArray(1 To currentFiles.Count) i = 1 For Each file In currentFiles fileArray(i) = file i = i + 1 Next file ' 現在のファイルリストと以前のファイルリストを比較 For Each file In fileArray On Error Resume Next If IsEmpty(previousFiles(file)) Then fileAdded = True Exit For End If On Error GoTo 0 Next file If fileAdded Then ExecuteBatchFile MsgBox "File added detected. Batch file executed." End If Function GetFileList() As Collection Dim folderPath As String Dim fileSystem As Object Dim folder As Object Dim file As Object Dim fileList As New Collection folderPath = "C:\Path\To\Your\Folder" ' 監視するフォルダのパスを設定 Set fileSystem = CreateObject("Scripting.FileSystemObject") Set folder = fileSystem.GetFolder(folderPath) For Each file In folder.Files fileList.Add file.Name, file.Name Next file Set GetFileList = fileList End Function Sub ExecuteBatchFile() Dim batchFilePath As String batchFilePath = "C:\Path\To\BackupScript.bat" ' バッチファイルのパスを設定 Shell batchFilePath, vbNormalFocus End Sub ' 現在のファイルリストを保存 Set previousFiles = currentFiles ' 再度監視を開始 StartMonitoring End Sub Private Sub Workbook_Open() StartMonitoring End Sub
- ベストアンサー
- Visual Basic
- ゆず
- 回答数1
- マクロ・テーブルの色のついた列だけコピーしたい
Excelマクロで悩んでいます。どのように書いたらいいかご教授ください。 ■実行したい内容 添付の画像をご参照いただければと思いますが、指定したテーブルの色のついた行だけを別のシートにコピーしたいです。 ■補足 ・添付の画像では行数を16程度にしていますが実際に使いたい内容では1000行近くあるのと、同シート内でコピーしてほしくない列もあるため、テーブルで指定しています。(図でA~G列はコピー対象だけどH以降は色がついていてもコピー対象外) ですのでテーブルとしていますが、セル指定での範囲選択でなければできない、という話であればそこにはこだわりません。 ・図の結果にあるように、「フォルダB-userB-△」のように、必ず行はセットで転記したいです。 自分で調べてかいた内容では、どうしても「フォルダB-userF-〇」のように、上に詰めて転記されてしまいました。「フォルダBに色をつけたらB~G列すべて色がつく」ようにすれば自分が書いた内容でも対処はできると思いますが、それでは(やりたい内容上)意味がないので、ご相談した次第です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- xx99xxfqao
- 回答数4
- VBA 動的配列(2次元)を引数として参照渡しする
VBAで表題の処理を実装しようとしているのですが、コンパイルエラー「ByRef引数の型が一致しません」が出ます。型は合っているように見えるのですが、どうにも解決できません。どなたか原因と対策についてご教示いただけないでしょうか。Public Sub test1() Dim TestArray() As String: ReDim TestArray(1 To 10000, 1 To 4) test2 TestArray End Sub Public Sub test2(ByRef TestArray() As String) ~処理~ End Sub
- ベストアンサー
- Visual Basic
- usatos
- 回答数2
- VBA 数式の入力方法
セルの連結や文字列の扱いで混乱してエラーばかり起こしています。 画像にて状況を説明致します。 ・行を表す、変数i は11 です。 ・N11セルに、画像上部の数式となる様にVBAでコードを入力したいです。 (→C11セルが10桁なら、頭に0を加えて11桁にする。そうでなければ その数字を入力する) ・「Range("N" & i).Formula = 」の続きのコードをご教示願います。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- 0611birth
- 回答数3
- エラーがたまにでます
下記マクロはネットで見つけたものですが、綺麗に動くのですがたまにエラーがでます パスのエラー?で止まるのですが 何か治したいほうが良いところがもしわかれば教えていただきたいです Sub updFileName() 'フォルダパスを宣言 Dim path As String Dim j As Integer 'A2セルの文字をパスに設定 path = Cells(2, 1) & "\" j = 1 'B4セルからファイル名を更新 Do Until Cells(j + 3, 1) = "" 'A列のファイル名をB列のファイル名に更新 Name path & Cells(j + 3, 1) As path & Cells(j + 3, 2) j = j + 1 Loop End Sub ネットは、これです↓ https://skainoblog.com/renamefile/ なんか、変更が途中で止まる、、ことがあるんです。そしたらパスのエラー?とでてました
- ベストアンサー
- Visual Basic
- ゆず
- 回答数4
- Excel VBA:独習&練習問題サイト
Excel VBAを独習でき、練習問題を解いてコードをジャッジしてくれるサイト 現在Paizaに課金し、Pythonの説明動画と、演習問題を解いてPython 3のベンダー資格をとることができました 同じことをExcel VBAに関してPaizaでやろうと思いましたが、Excel VBAの講座はないようです オンラインで、Excel VBAの独習ができ、演習問題でコードを書いて、それが正しい解を出力するかジャッジするサイトはあるでしょうか? 最初~4カ月くらいは無料で試したいです 良ければ課金します OS:Windows 11/10
- 締切済み
- Visual Basic
- ketae
- 回答数2
- VBA既存シートからリスト形式の作成
Excel VBAの質問です (Office2021を使用) 給与計算のための労働時間計算を、事務スタッフがクラウド上の計算サービスに、スタッフ15名分ほどを、1人1人手入力をし、入力間違いが起こっていました クラウドのサービス会社に問い合わせてみたところ、指定の列をもつCSV形式にして、一括インポートができることがわかりました で、まず各人のタイムカードの時刻から労働時間を自動計算するシートをわたしがつくり、全人の労働時間が出たので、あとは時給を掛けるだけでその月の支払い総額がわかるようにしました つまり全員の労働時間のシートを、同じ形にしました で、あまり詳しくないですが、マクロ(自動記録)で、各シートにある氏名と時間列のセル(具体的にはB2 G41 H41 J41 K41)を、画像のようなリストの形に流し込みたいと思いました しかし2行目(スタッフNo.0001番)は自動で入ったものの、3行目(スタッフNo.0002)以降の追加のコードがわかりません スタッフは月によって変動しだいたい13~MAXでも20名いるので、シート数は最大20はあります 【質問orお願い】 ・その月につくったスタッフ人数分のシートの総数を確認し、各労働時間(各シートのB2 G41 H41 J41 K41)を、画像のような列に入れ込むコードはどう書いたらよいでしょうか? アイデアをいただきたい、または親切な方いましたらコード書いていただけると助かります 【回答上のご注意】 ・回答は解答(答え)を求めての投稿です ・昭和的な「あとは自分で考えろ」的なものは求めていません (登山の途中でいなくなる登山ガイドのようなものです) ・不明点あれば追加情報をお伝えします 動作の結果責任は問いませんのでよろしくお願いします
- 締切済み
- Visual Basic
- ketae
- 回答数4
- pdf 複数開かずに確認
pdfが30件程度あります 開かず中身を確認する方法はありますか?プレビューだとパソコンが固まって中身を、すばやく確認できません
- ベストアンサー
- Visual Basic
- ゆず
- 回答数1
- vbaの勉強方法について
独学で、vbaを習得したいです! ただ、きっかけは仕事が忙しく、とてもじゃないけど余裕が持てない。。 のが嫌すぎて、はじめました。 なので、無理やり作ってなんとか動かしてた、という感じで、最初に作ったのは途中で不具合が出たりして、全く身についてません。 本当に習得なんてほど遠く、業務中に、あ、これ効率化できるのでは?と閃いたら必死でvbaをネットで探して切り取りつぎはぎだらけ、本を見て繋いで、という感じです。最近はここに書けば答えてくださる優しい方を頼るだけで、ちょっと、あかんな、勉強せな、と思います。 私のマクロレベルは、1人で困難なく作れたのが、昨日の話ですが最終行まで、昇順に並べる、ぐらいかと思います。 難しすぎて、仕事を早く終わらせたい、という目的がなければ、やる気起きなかったです。本当にわけがわからない世界です。でも、すぐに、文を考え、希望のマクロを作れる人を尊敬します。 皆さんはどうやって学んだのですか?? 参考に、させてください。 よろしくお願いします。
- 締切済み
- Visual Basic
- ゆず
- 回答数5
- リストにある文字が検索列にあれば印
A列にリストがあり、C列のセル内に リストの5桁の数字があれば、C列にチェック(字を赤くするなど)が入り確認が可能になるマクロを組みたいです。下記はネットで探してきて、コピーして動かしたのですが、End ifに対するifがありませんが出て、その後Loopに対するForがありません、と出ました。 下記は合ってますか? Sub Sample1() Dim i As Long, k As Long, myStr As String Dim myFound As Range, myFirst As Range For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row myStr = Cells(i, "A") Set myFound = Range("C:C").Find(what:=myStr, LookIn:=xlValues, lookat:=xlPart) If Not myFound Is Nothing Then Set myFirst = myFound GoTo 処理 Do Set myFound = Range("C:C").FindNext(after:=myFound) If myFound.Address = myFirst.Address Then Exit Do GoTo 処理 処理: For k = 1 To Len(myFound) If Mid(myFound, k, Len(myStr)) = myStr Then myFound.Characters(Start:=k, Length:=Len(myStr)).Font.ColorIndex = 3 End If Next k Loop End If Next i End Sub
- ベストアンサー
- Visual Basic
- ゆず
- 回答数3
- VS2022でNugetパッケージの入れ方
VS2022で.NetFramework4.0を使いたいです。 https://qiita.com/diontools/items/b193ae8394161fc26698#net-framework-4--45-の場合 「ダウンロードした Nuget パッケージを .zip にリネームし、その中の /build/.NETFramework/ 以下を C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\ に上書きすることで配置完了です。」とありますが、具体的にリンク先のどのファイルをダウンロードすればよいのでしょうか。
- ベストアンサー
- Visual Basic
- subarist00
- 回答数2
- Visualstudio2019参照設定
Visualstudio2019(VisualBasic2019)を利用してシステム開発を行っております。 クリスタルレポート関連の参照設定についてはローカルへコピーしないよう設定しているのですが、ローカルにコピーされてしまいます。 何か設定に不備があるとは考えているのですが、分かる方がいらっしゃいましたらご教授頂けますと幸いです。 以上です。
- ベストアンサー
- Visual Basic
- 19820202
- 回答数1
- Constで現在日付と文字を合わせた値を変数へ代入
質問時刻=2024/03/11 22:15、タイトル名=『vlookupを使ったマクロの書き方』で、質問させて頂き、HohoPapa様にご教示頂いたマクロのコードについて、メールアドレスが入っているファイルのシート名に変更が生じましてコードの変更が必要になりました。 修正箇所は、『Const TblSheet = "職員マスタ"』になります。 色々と修正を加えて見ましたが、エラーが出てしまいマクロの正常稼働で出来ませんでした。 変更点は、シート名=『職員マスタ』を『employee-20240510』への変更になります。『employee-』は固定文字ですが、『20240510』は現在の日付を指定したいです。 Const TblSheet = "employee-" & Format(Now, "yyyymmdd")と しましたが、エラーがでてしまいます。 お忙しい中、大変恐縮ですが、お手すきの時に対応させたマクロのご教示を頂けましたら大変助かります。 上記1行のマクロのコードのみ、ご教示頂ければ大丈夫です。 今現在まで、ルーチンワークとして便利に使わせて頂いております。 ------以下は現在のマクロのコードです----------------- Option Explicit Const tgSheet = "Sheet1" Const TblBook = "C:\Users\watan\Documents\27_EXCEL教習\TEST\11_2024-課題参画者リスト\スクリプト\職員DB.xlsx" Const TblSheet = "職員マスタ" Const NumCol = 2 '転記先職員番号列番号 Const AddressCol = 4 '転記先メールアドレス列番号 Dim LogFile As String Dim tgBookName As String Sub Mainjob() Dim tgBook As Workbook Dim r As Long Dim HitAddress As String '1つのログファイルに常に新規作成(処理の都度上書き)する。 LogFile = ThisWorkbook.Path & "\" & _ "MentLog.csv" Open LogFile For Output As #2 Close #2 Logput "M0", "", "", "", "転記処理開始", "" '対象ファイル名の組立 tgBookName = _ "C:\Users\watan\Documents\27_EXCEL教習\TEST\11_2024-課題参画者リスト\出力結果\" & _ Format(Now, "YYYY") & _ "参画者リストまとめ_" & _ Format(Now, "YYYYMMDD") & _ ".xlsx" '対象ブックを開く Set tgBook = Workbooks.Open(tgBookName) 'Main処理 r = 1 With tgBook.Sheets(tgSheet) Do r = r + 1 If .Cells(r, NumCol).Value = "" Then Exit Do If IsNumeric(.Cells(r, NumCol).Value) = False Then Logput "M2", Format(r, "0"), _ .Cells(r, NumCol).Value, "", "職員番号が不正", .Cells(r, 1).Value Else HitAddress = GetMailAdress(.Cells(r, NumCol).Value) If HitAddress = "Not Found" Then Logput "M3", Format(r, "0"), _ .Cells(r, NumCol).Value, "", "職員番号が見つからない", .Cells(r, 1).Value ElseIf ((HitAddress = "Null") Or (HitAddress = "")) Then Logput "M4", Format(r, "0"), _ .Cells(r, NumCol).Value, "", "マスターのメールアドレスが空欄", .Cells(r, 1).Value ElseIf .Cells(r, AddressCol).Value <> "" Then If HitAddress <> .Cells(r, AddressCol).Value Then Logput "M5", Format(r, "0"), _ .Cells(r, NumCol).Value, .Cells(r, AddressCol).Value, "既に異なるアドレスが埋まっている" & "," & HitAddress, .Cells(r, 1).Value Else Logput "M6", Format(r, "0"), _ .Cells(r, NumCol).Value, .Cells(r, AddressCol).Value, "既に同じアドレスが埋まっている", .Cells(r, 1).Value End If Else .Cells(r, AddressCol).Value = HitAddress Logput "M1", Format(r, "0"), _ .Cells(r, NumCol).Value, HitAddress, "メールアドレスをセット", .Cells(r, 1).Value End If End If Loop End With '対象ブックを保存して閉じる tgBook.Save tgBook.Close Logput "M9", "", "", "", "転記処理終了", "" End Sub '職員番号を引数にメールアドレスを返す関数 Function GetMailAdress(sNum As Long) As String Dim SQL As String Dim cn As Object Dim rs As Object 'SQL文の実行準備 Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1" cn.Open TblBook 'SQL文の組立 SQL = "" SQL = SQL & "select [メールアドレス]" & vbCrLf SQL = SQL & "FROM [" & TblSheet & "$A1:Z50000]" & vbCrLf SQL = SQL & "Where [職員番号] = " & sNum & vbCrLf rs.Open SQL, cn 'ヒットする行が無かったら抜ける If rs.EOF = True Then GetMailAdress = "Not Found" Else If IsNull(rs("メールアドレス")) Then GetMailAdress = "Null" Else GetMailAdress = rs("メールアドレス") End If End If '後処理 rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Function
- ベストアンサー
- Visual Basic
- nnirosan
- 回答数2
- VBA AutoFilterModeについて
以下のサイトにVBAのサンプルがあったので見ていたのですが、「Range("A1").AutoFilterMode」という箇所があります。RangeオブジェクトにAutoFilterModeプロパティは無いと思いますし、実行するとエラーになりますが、このコードについてあっているのか、間違っているのか、どちらになるでしょうか? https://github.com/carvetighter/VBA-Code-Library/blame/master/Mod_Autofilter.bas
- ベストアンサー
- Visual Basic
- mim112334
- 回答数1
- オートフィルターの結果ごとに自動で印刷したいです
Excelで添付のようなリストから月末に ・A列の請求期間をフィルター(基本月ごと、1月1日~1月31日迄等) ・B列の得意先ごとにフィルター結果の上から1件ずつレ点を入れ得意先1件ずつ印刷 上記のような作業を毎月行っています。 A列の日付は顧客ごとに末締めや15日締め等あるので手動で問題無いのですが、B列の得意先ごとに1件ずつチェックを入れて印刷するのが手間なので日付フィルター後にボタン1発で全得意先分を順番に印刷できるようにしたいです。 どなたか知恵をお貸し頂けませんでしょうか。
- ベストアンサー
- Visual Basic
- Soriani52
- 回答数1
- Excel VBAを使用した勤務表の作成
現在、月毎にシート別になっている勤務表の管理をしており、初心者ながらExcel VBAを使って効率的に作成したいと思っています。 勤務表は1行目に日付、A列に従業員の名前が入っています。 その中でつまづいている箇所がありますので以下の2点について教えてください。 ① 従業員の中に三交代制の従業員がいます。 A、B、Cの3つの班に分かれており、その日がどの班なのか分かるように日付の下の行に「A B C A B C ・・・」と順番に記載したいですがどのようにしたら良いでしょうか? また、この時に月を跨ぐとAから始まらない(前月がBで終わると翌月1日はCから始まる)と思うのですが、シートを跨いでABCの3つが続いていくようにしたいです。 ② 前記①が完了したら、三交代制の従業員の隣にそれぞれABCの表記をし、日付のABCと従業員のABCがそれぞれ交わる日のセルに「出勤」と入れたいです。 職場のパソコンで作業しているため、現在手元にデータがなく、参考となる画像がつけられずに分かりづらいとは思いますがご回答頂けると助かります。 よろしくお願いします。
- 締切済み
- Visual Basic
- wpetmgam
- 回答数6