マクロVBAでExcelシートを自在に操作できるようになろう!

Поділитися
Вставка
  • Опубліковано 14 січ 2025

КОМЕНТАРІ • 14

  • @hiomf.5168
    @hiomf.5168 Рік тому

    いつも、わかりやすくて、有意義な動画をありがとうございます。インテリセンスの出し方についての余談も貴重でした。これからも、豆知識も期待してます!

  • @KOTTERHORRY
    @KOTTERHORRY Рік тому

    いつもわかりやすく勉強させてただいています。
    VBAは本当に初心者なのですが仕事にも役立てればなと参考にさせていただいています。
    で、ここで質問をしてもいいのかどうかなのですがもしよろしければ教えてください。
    Excelで一つのシート上の「D6:P2000」のデータベースの中を「検索」し検索値のセルがアクティブセルに
    なった時に「検索終了」のボタンを押したときに検索結果がどの列にあっても
    検索結果の「行」は変えずに「列」が「D列」になるようなマクロってできますか?

  • @ダブルチキンステーキハマってます

    初めまして!excel、マクロと初心者で勉強中で、いつも参考にさせて頂いております、先生ですね、
    さて、今回のワークシートを非表示にする方法の動画なんですが、手順は理解できました、先生有難うございます、疑問に思う事があります、自分用のマクロ作成ならあまり必要ない方法なのかなと思いました。第三者が利用したときにシートを非表示させて隠すって事が正解かわかりませんが、具体的に非表示を使う状況はどういったときなのでしょうか?

    • @macro-chan
      @macro-chan  2 роки тому

      Excel全般で言うと機密性の高いシートを非表示にするとかですかね。
      VBAだけで言うと「作業用シート」として一時的に非表示で挿入するなどがあります。

  • @qwer8709
    @qwer8709 3 роки тому

    いつも拝見しています。質問いいですか?
    ワークシートの名前が月単位で変わるブック(●月一覧表.xlsみたいなかんじです)に向けて、マクロ元(This Workbook)からマクロを実行したいです。
    名前が変わるExcelをアクティブシートにしたいときはdir関数でパス取得して、戻り値を変数に入れるというので合ってますか?見当違いしていたらヒントを欲しいです。
    こちらの動画シリーズを繰り返し見ているうちに初心者の自分にも拙いですがコードが書けるようになってきて楽しいです。ためになる動画いつもありがとうございます!

    • @macro-chan
      @macro-chan  3 роки тому +1

      ご視聴とご質問ありがとうございます。
      ただすみません、ちょっと質問の意味がわからなかったです。
      >ワークシートの名前が月単位で変わるブック(●月一覧表.xlsみたいなかんじです)
      変わるのはワークシートの名前なのか、ブックの名前なのかどっちなんでしょうか?
      >名前が変わるExcelをアクティブシートにしたい
      アクティブシートじゃなくてアクティブブックにしたいという意味ですか?
      あと、ブックが複数あるのか2個なのか1個なのかなど状況がわからないです。
      実現したいことを具体的に書いて頂ければアドバイスできるのかなと思います😊

    • @qwer8709
      @qwer8709 3 роки тому +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
      ここで、ファンクションブイルックアップ が上手くいっていないことに気が付きました。
      これはアクティブシートの切り替えが出来てないことが原因だと考えたので、
      アクティブシートにするためにはディレクトリ関数を使うのでしょうか?という質問になりました。
      初めてマクロの記録以外のコードを書くくらいの経験値なので、そもそも見当違いしていたらお恥ずかしいのですが、このチャンネルを見るようになってから、自分で書けるようになりたいと本気で思っています!よろしくお願いします!

    • @macro-chan
      @macro-chan  3 роки тому +1

      セルの配置関係とかよくわからないので勝手に想定して作りましたが、おおよそこんな感じになるかと思います。
      ・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

    • @qwer8709
      @qwer8709 3 роки тому +1

      @@macro-chan 丁寧に私の質問に付き合ってくださりありがとうございます
      模範解答のコードを読んでみて、自分で書いたコードがすごく回り道してることに気付きました…
      頭を悩ませていたブックをアクティブにするという部分も、ディレクトリ関数を先頭に持ってくるという発想がなかったので目から鱗でした🥺🥺
      基礎講座を繰り返し見て、まずは自力で完成させてみるのが小さな目標です!こちらのマクロちゃんねるも、PC活用ちゃんねるも応援しています!いつも独学を後押ししてもらってます🥰ありがとうございました!

  • @公武
    @公武 3 роки тому

    いつも勉強させていただいております。月間集計表を作っているのですが、1月から12月まで一気にシートを追加するのではなく、毎月、1シートずつ ”〇〇月” と名前を付けて追加していく事は可能でしょうか? 無知ですみません💦 VBA学習になった途端に難しく苦戦しています💦

    • @macro-chan
      @macro-chan  3 роки тому +4

      もちろん可能です。
      具体的にどういったシステムなのかわかりませんが、とりあえず作業を1つずつ分解して考えます。
      手作業でやる場合どうやるのか、そしてそれを「マクロの記録」で記録してみてある程度どのようなオブジェクトとプロパティとメソッドが必要なのか把握、それを参考にプロシージャを作るといいと思います。

    • @公武
      @公武 3 роки тому

      @@macro-chan 返信ありがとうございます。無知なりに試行錯誤してみます。

  • @taichirox
    @taichirox 2 місяці тому

    シートが全部で10あって、左からシート1〜10(仮名)とあるとき、シート1のみを表示しシート2〜10は非表示中です。Copy , Sheets(Sheets.Count)で、コピーしたシートを非表示中のシート10のすぐ後ろに配置したいのに、表示中のシート1のすぐ後ろに配置されてしまいます。Sheets.Countの時点では確かに10を数えているようですが、いざ配置する段階になると、表示中のシートのすぐ後ろ、つまり左から2番目に挿入されるように配置されてしまいます。全てのシートを表示状態で同じ作業をすると問題なくシート10のすぐ後ろに新しいシートが配置されます。どうしたら解決できるのでしょうか?

  • @increatsu
    @increatsu 2 роки тому

    大変わかりやすい動画、いつもありがとうございます。
    今度、officescriptとVBAの違いを教えていただけませんか🙇🏻‍♂️