【VBA】別シートに条件別で転記【WorksheetsとCopyを使う】

Поделиться
HTML-код
  • Опубликовано: 14 дек 2024

Комментарии • 12

  • @tyanoku6995
    @tyanoku6995 2 года назад +1

    実務でやりたかったことのヒントになりそうです、
    チャレンジしたいと思います。
    ありがとうございます。

  • @pontakunwf6
    @pontakunwf6 2 года назад

    アップありがとうございました。これを使うと自分のやりたいこと、ずばり出来そうです!めっちゃ助かります❗️

    • @IT-gx8sf
      @IT-gx8sf  2 года назад +1

      コメントありがとうございます!
      お役に立てたようで何よりです。
      これからも、お役に立てるようがんばっていきます(^^)

  • @Yossy8816
    @Yossy8816 2 года назад +2

    こちらのマクロを探していました!
    大変便利で重宝しています♪
    ひとつ上手くいかないのが、マクロを実行して最初のシートだけフィルタ機能が上手くいかず、フィルタされないまま全てのデータが反映されます。次のシートからは成功するのですが…。何かわかりますでしょうか?

    • @IT-gx8sf
      @IT-gx8sf  2 года назад +1

      コメントありがとうございます!
      「フィルタされないまま全てのデータが反映される」というのは、難しいですね(^^;)再現ができませんでした。
      参考にされているVBAコードは、次のVBAコードになりますでしょうか。
      Sub TEST4()
      '配列を作成
      Dim A
      A = Array("東京", "大阪", "名古屋", "福岡")
      For i = 0 To 3
      '支店でフィルタ
      Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i)
      'シートを追加
      Worksheets.Add after:=ActiveSheet
      ActiveSheet.Name = A(i) 'シート名を変更
      'フィルタしたデータを、別シートに転記
      Worksheets("Sheet1").Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
      'フィルタを解除
      Worksheets("Sheet1").Range("A1").AutoFilter
      Next
      End Sub
      以下のブログにて紹介しているVBAコードになります。
      daitaideit.com/vba-worksheets-workbooks/
      また、表のデータとしては、ブログに記載のデータとなりますでしょうか。こんな感じ↓のデータでしょうか?
      No 支店 商品
      1 東京 A
      2 大阪 B
      3 東京 C
      4 大阪 D
      5 名古屋 E
      6 福岡 F
      7 名古屋 G
      8 東京 H
      9 沖縄 I
      とりあえずのアプローチとしては、次のようなものが考えられます。
      アプローチ①
      現在、最初のシートに対してフィルタをかけている「検索値」で、AutoFilterを使って、シンプルにフィルタをかけてみると、フィルタがかかりますでしょうか。かかる場合は、検索値に問題がなくて、かからない場合は、検索値に問題がありそうです。
      アプローチ②
      F8を使ってVBAコード毎に実行して、「.AutoFilter」のVBAコードを含め、実行する手順を確認してみるとどうでしょうか。もしかしたら、「.AutoFilter」のVBAコード以外で、オートフィルタを全表示させてしまっているなどの意図しない箇所が見つかるかもしれません。
      アプローチ③
      ブックのオブジェクトを指定していないので、別ブックを開いている場合は、意図しない動作となる可能性がありますので、別ブックを閉じて実行するとどのようになりますでしょうか。

    • @Yossy8816
      @Yossy8816 2 года назад +1

      @@IT-gx8sf
      早々に返信ありがとうございます!
      記載のあるコードに違いは見当たらないのですが、アプローチ①、②、③をやってみます!

    • @Yossy8816
      @Yossy8816 2 года назад +1

      @@IT-gx8sf
      返信が遅れてしまい申し訳ありません。
      F8でひとつひとつ実行しましたら、フィルタまではうまくいくのですが、別シート作成→シート名を変更→貼り付け(ここで全データ貼り付け)のところに原因があるかと思います。でも2枚目のシートからは問題なく実行でき、フィルタも問題ない状態ですね…

    • @IT-gx8sf
      @IT-gx8sf  2 года назад +1

      コメントありがとうございます!
      ちょっと原因はわからないんですけど、コピーする際に、「SpecialCells」を使ってみるとどうでしょうか。
      コピーするVBAコードのところで、「CurrentRegion」のあとに、「SpecialCells(xlCellTypeVisible)」を追加しています。
      Sub TEST4_2()
      '配列を作成
      Dim A
      A = Array("東京", "大阪", "名古屋", "福岡")
      For i = 0 To 3
      '支店でフィルタ
      Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i)
      'シートを追加
      Worksheets.Add after:=ActiveSheet
      ActiveSheet.Name = A(i) 'シート名を変更
      'フィルタしたデータを、別シートに転記
      Worksheets("Sheet1").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1")
      'フィルタを解除
      Worksheets("Sheet1").Range("A1").AutoFilter
      Next
      End Sub

    • @Yossy8816
      @Yossy8816 2 года назад +1

      @@IT-gx8sf
      出来ました!ありがとうございます!
      すごいですね!助かりました🙇‍♂️

  • @pontakunwf6
    @pontakunwf6 2 года назад +1

    質問です。TEST5の重複しないリスト作成の際、xlFilterInPlaceを使用されてますが、xlFilterCopyではダメなのでしょうか?

    • @IT-gx8sf
      @IT-gx8sf  2 года назад +1

      コメントありがとうございます!
      おっしゃるとおりで、今回の場合でいくと「xlFilterCopy」を使うと、次のように、かなりシンプルなVBAコードになりますね(^^)
      Dim A
      Set A = Sheets("Sheet1").Range("A1").CurrentRegion.Columns(2)
      A.AdvancedFilter Action:=xlFilterCopy, CopytoRange:=Range("E1"), Unique:=True
      存じておりませんでした(^^;)
      勉強になります!コメントありがとうございます♪

    • @pontakunwf6
      @pontakunwf6 2 года назад +1

      いつも役立つ動画、感謝しております。これからも動画のアップお願いします。(o^^o)