@@macro-chan ほんとですね!読み返して支離滅裂なことに気が付きました ファンクションブイルックアップ を使った機材配置のマクロを作りたいです マクロ元のシート1にテーブルがあります テーブルには社員ナンバー、名前、使って欲しい機材番号のテーブルがあります もう一つブックを開いきます このブックには1日から31日までシートがあります 1シートずつにその日に出勤する人の社員ナンバーと名前が入っています ファンクションブイルックアップで、全シート、その日の出勤者が使う機材を配置したいです Sub 配置() Dim rc As Long Dim i As Long: i = 1 Dim j As Long: j = 1 Dim sh As Long: sh = 1 Dim ws As Worksheet Dim SearchKey As Range Dim SearchRange As Range Dim OutputRange As Range rc = MsgBox("対象ファイルを開いていますか?", vbYesNo) If rc = vbYes Then MsgBox "配置を開始します" For i = 1 To Worksheets.Count Worksheets(i).Range("l3:l38").ClearContents Next On Error Resume Next 'Application.ScreenUpdating = False For Each ws In Worksheets ws.Activate For j = 1 To SearchKey.Rows.Count Set SearchKey = Workbooks(1).Worksheets(1).Range("A2:C100") Set SearchRange = Workbooks(2).Worksheets(sh).Range("C3:l100") Set OutputRange = Workbooks(2).Worksheets(sh).Range("L3:L100") OutputRange(j, 1) = WorksheetFunction.VLookup(SearchKey(j, 1), SearchRange, 3, False) Next sh = sh + 1 Next ws 'Application.ScreenUpdating = True Else MsgBox "終了します" End If End Sub ここで、ファンクションブイルックアップ が上手くいっていないことに気が付きました。 これはアクティブシートの切り替えが出来てないことが原因だと考えたので、 アクティブシートにするためにはディレクトリ関数を使うのでしょうか?という質問になりました。 初めてマクロの記録以外のコードを書くくらいの経験値なので、そもそも見当違いしていたらお恥ずかしいのですが、このチャンネルを見るようになってから、自分で書けるようになりたいと本気で思っています!よろしくお願いします!
セルの配置関係とかよくわからないので勝手に想定して作りましたが、おおよそこんな感じになるかと思います。 ・VLOOKUPで機材を抽出したいブックをBookX ・マクロ記載ブックにあるテーブル名はテーブル1 ・BookXの表はA1にあり1行目が見出し Sub 配置() 'テーブルの検索範囲をSearchRange変数に代入 Dim SearchRange As Range ThisWorkbook.Activate Set SearchRange = Range("テーブル1[[名前]:[機材番号]]") '使用機材割当表ブックを開きBookX変数に代入 Dim BookX As Workbook, pass As String pass = "ここに使用機材割当表ブックのパスを記入" If Dir(pass) = "" Then MsgBox "ブックが存在しません" Exit Sub Else Set BookX = Workbooks.Open(pass) MsgBox "配置を開始します" End If '割当 Dim i As Long, j As Long BookX.Activate For i = 1 To 31 Sheets(i).Activate j = 2 Do While Cells(j, 1) "" Cells(j, 3) = WorksheetFunction.VLookup(Cells(j, 2), SearchRange, 2, False) j = j + 1 Loop Next i End Sub
いつも、わかりやすくて、有意義な動画をありがとうございます。インテリセンスの出し方についての余談も貴重でした。これからも、豆知識も期待してます!
いつもわかりやすく勉強させてただいています。
VBAは本当に初心者なのですが仕事にも役立てればなと参考にさせていただいています。
で、ここで質問をしてもいいのかどうかなのですがもしよろしければ教えてください。
Excelで一つのシート上の「D6:P2000」のデータベースの中を「検索」し検索値のセルがアクティブセルに
なった時に「検索終了」のボタンを押したときに検索結果がどの列にあっても
検索結果の「行」は変えずに「列」が「D列」になるようなマクロってできますか?
初めまして!excel、マクロと初心者で勉強中で、いつも参考にさせて頂いております、先生ですね、
さて、今回のワークシートを非表示にする方法の動画なんですが、手順は理解できました、先生有難うございます、疑問に思う事があります、自分用のマクロ作成ならあまり必要ない方法なのかなと思いました。第三者が利用したときにシートを非表示させて隠すって事が正解かわかりませんが、具体的に非表示を使う状況はどういったときなのでしょうか?
Excel全般で言うと機密性の高いシートを非表示にするとかですかね。
VBAだけで言うと「作業用シート」として一時的に非表示で挿入するなどがあります。
いつも拝見しています。質問いいですか?
ワークシートの名前が月単位で変わるブック(●月一覧表.xlsみたいなかんじです)に向けて、マクロ元(This Workbook)からマクロを実行したいです。
名前が変わるExcelをアクティブシートにしたいときはdir関数でパス取得して、戻り値を変数に入れるというので合ってますか?見当違いしていたらヒントを欲しいです。
こちらの動画シリーズを繰り返し見ているうちに初心者の自分にも拙いですがコードが書けるようになってきて楽しいです。ためになる動画いつもありがとうございます!
ご視聴とご質問ありがとうございます。
ただすみません、ちょっと質問の意味がわからなかったです。
>ワークシートの名前が月単位で変わるブック(●月一覧表.xlsみたいなかんじです)
変わるのはワークシートの名前なのか、ブックの名前なのかどっちなんでしょうか?
>名前が変わるExcelをアクティブシートにしたい
アクティブシートじゃなくてアクティブブックにしたいという意味ですか?
あと、ブックが複数あるのか2個なのか1個なのかなど状況がわからないです。
実現したいことを具体的に書いて頂ければアドバイスできるのかなと思います😊
@@macro-chan
ほんとですね!読み返して支離滅裂なことに気が付きました
ファンクションブイルックアップ を使った機材配置のマクロを作りたいです
マクロ元のシート1にテーブルがあります
テーブルには社員ナンバー、名前、使って欲しい機材番号のテーブルがあります
もう一つブックを開いきます
このブックには1日から31日までシートがあります
1シートずつにその日に出勤する人の社員ナンバーと名前が入っています
ファンクションブイルックアップで、全シート、その日の出勤者が使う機材を配置したいです
Sub 配置()
Dim rc As Long
Dim i As Long: i = 1
Dim j As Long: j = 1
Dim sh As Long: sh = 1
Dim ws As Worksheet
Dim SearchKey As Range
Dim SearchRange As Range
Dim OutputRange As Range
rc = MsgBox("対象ファイルを開いていますか?", vbYesNo)
If rc = vbYes Then
MsgBox "配置を開始します"
For i = 1 To Worksheets.Count
Worksheets(i).Range("l3:l38").ClearContents
Next
On Error Resume Next
'Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
For j = 1 To SearchKey.Rows.Count
Set SearchKey = Workbooks(1).Worksheets(1).Range("A2:C100")
Set SearchRange = Workbooks(2).Worksheets(sh).Range("C3:l100")
Set OutputRange = Workbooks(2).Worksheets(sh).Range("L3:L100")
OutputRange(j, 1) = WorksheetFunction.VLookup(SearchKey(j, 1), SearchRange, 3, False)
Next
sh = sh + 1
Next ws
'Application.ScreenUpdating = True
Else
MsgBox "終了します"
End If
End Sub
ここで、ファンクションブイルックアップ が上手くいっていないことに気が付きました。
これはアクティブシートの切り替えが出来てないことが原因だと考えたので、
アクティブシートにするためにはディレクトリ関数を使うのでしょうか?という質問になりました。
初めてマクロの記録以外のコードを書くくらいの経験値なので、そもそも見当違いしていたらお恥ずかしいのですが、このチャンネルを見るようになってから、自分で書けるようになりたいと本気で思っています!よろしくお願いします!
セルの配置関係とかよくわからないので勝手に想定して作りましたが、おおよそこんな感じになるかと思います。
・VLOOKUPで機材を抽出したいブックをBookX
・マクロ記載ブックにあるテーブル名はテーブル1
・BookXの表はA1にあり1行目が見出し
Sub 配置()
'テーブルの検索範囲をSearchRange変数に代入
Dim SearchRange As Range
ThisWorkbook.Activate
Set SearchRange = Range("テーブル1[[名前]:[機材番号]]")
'使用機材割当表ブックを開きBookX変数に代入
Dim BookX As Workbook, pass As String
pass = "ここに使用機材割当表ブックのパスを記入"
If Dir(pass) = "" Then
MsgBox "ブックが存在しません"
Exit Sub
Else
Set BookX = Workbooks.Open(pass)
MsgBox "配置を開始します"
End If
'割当
Dim i As Long, j As Long
BookX.Activate
For i = 1 To 31
Sheets(i).Activate
j = 2
Do While Cells(j, 1) ""
Cells(j, 3) = WorksheetFunction.VLookup(Cells(j, 2), SearchRange, 2, False)
j = j + 1
Loop
Next i
End Sub
@@macro-chan 丁寧に私の質問に付き合ってくださりありがとうございます
模範解答のコードを読んでみて、自分で書いたコードがすごく回り道してることに気付きました…
頭を悩ませていたブックをアクティブにするという部分も、ディレクトリ関数を先頭に持ってくるという発想がなかったので目から鱗でした🥺🥺
基礎講座を繰り返し見て、まずは自力で完成させてみるのが小さな目標です!こちらのマクロちゃんねるも、PC活用ちゃんねるも応援しています!いつも独学を後押ししてもらってます🥰ありがとうございました!
いつも勉強させていただいております。月間集計表を作っているのですが、1月から12月まで一気にシートを追加するのではなく、毎月、1シートずつ ”〇〇月” と名前を付けて追加していく事は可能でしょうか? 無知ですみません💦 VBA学習になった途端に難しく苦戦しています💦
もちろん可能です。
具体的にどういったシステムなのかわかりませんが、とりあえず作業を1つずつ分解して考えます。
手作業でやる場合どうやるのか、そしてそれを「マクロの記録」で記録してみてある程度どのようなオブジェクトとプロパティとメソッドが必要なのか把握、それを参考にプロシージャを作るといいと思います。
@@macro-chan 返信ありがとうございます。無知なりに試行錯誤してみます。
シートが全部で10あって、左からシート1〜10(仮名)とあるとき、シート1のみを表示しシート2〜10は非表示中です。Copy , Sheets(Sheets.Count)で、コピーしたシートを非表示中のシート10のすぐ後ろに配置したいのに、表示中のシート1のすぐ後ろに配置されてしまいます。Sheets.Countの時点では確かに10を数えているようですが、いざ配置する段階になると、表示中のシートのすぐ後ろ、つまり左から2番目に挿入されるように配置されてしまいます。全てのシートを表示状態で同じ作業をすると問題なくシート10のすぐ後ろに新しいシートが配置されます。どうしたら解決できるのでしょうか?
大変わかりやすい動画、いつもありがとうございます。
今度、officescriptとVBAの違いを教えていただけませんか🙇🏻♂️