• 締切済み

VBA 毎回データが違っても応用できるコード

HohoPapaの回答

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

やりたいことが >2以上の数値(#N/Aも含む)をコピーし、 >同じ行のQ列に値でペーストする ことで、 その手段として >O列をフィルタで昇順にして その後必要な範囲をコピー&ペーストしているということでしょうか。 つまり、単に O列を2行目から下方向に調べ >2以上の数値(#N/Aも含む) があったら、 それを同じ行のQ列に値を複写すればいいんですね? ならば、関数でもできそうですが VBAであれば、 Sub Sample()    Dim RowCounter As Long    With ThisWorkbook.Sheets(1)      .Columns(17).ClearContents   RowCounter = 2      Do        If IsError(.Cells(RowCounter, 15).Value) = False Then     If .Cells(RowCounter, 15).Value = "" Then      Exit Do     End If    End If        If IsError(.Cells(RowCounter, 15).Value) = True Then     .Cells(RowCounter, 17).Value = _     .Cells(RowCounter, 15).Value    ElseIf .Cells(RowCounter, 15).Value >= 2 Then _     .Cells(RowCounter, 17).Value = _     .Cells(RowCounter, 15).Value    End If       RowCounter = RowCounter + 1      Loop    End With End Sub でいかがでしょうか。

nkmyr
質問者

お礼

すみません。 締め切って再度質問しますので、宜しくお願いします。

nkmyr
質問者

補足

ありがとうございます。 すみません、手順が違っていましたので、修正しました。 O列をフィルタで昇順にします。 2以上の数値(#N/Aも含む)が入った行のP列をコピーして同じ行のQ列に値でペーストするといった流れです。 見やすくするため、ペーストしたものは赤い文字にしてくれたらありがたいです。 宜しくお願いします。 O列   P列 Q列 2 79 79 2 79 79 3 #N/A #N/A 4 #N/A #N/A 5 80 80 8 80 80 8 80 80 10 80 80 11 80 80 18 #N/A #N/A #N/A 84 84 #N/A 80 80 ↑   ↑ コピー  値でペースト

関連するQ&A

  • Excel2007のマクロでマクロを実行したところ、エラーが出てしまい

    Excel2007のマクロでマクロを実行したところ、エラーが出てしまいました。どうすればよいでしょうか? 実行時エラー'1004'「RangeクラスのSelectメソッドが失敗しました」 Range("テーブル1[#All]").Selectでエラーになります。 マクロの記録を使っただけなので、どう直せばよいのかさっぱりわかりません。 どうかよろしくお願いします。 Range("A5").Select ActiveWindow.SmallScroll Down:=12 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.SmallScroll Down:=-12 Columns("L:P").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("A5").Select ActiveWindow.SmallScroll Down:=30 Range("A5:L55").Select ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$5:$L$55"), , xlYes).Name = _ "テーブル1" Range("テーブル1[#All]").Select ActiveWindow.SmallScroll Down:=-36 Range("テーブル1[[#Headers],[列5]]").Select ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort.SortFields.Add _ Key:=Range("テーブル1[[#All],[列5]]"), SortOn:=xlSortOnValues, Order:= _ xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveSheet.ListObjects("テーブル1").Range.AutoFilter Field:=12, Criteria1:= _ Array("condition", "congruent", "control", "experiment", "="), Operator:= _ xlFilterValues ActiveWindow.SmallScroll Down:=-6 End Sub

  • マクロ 並び替え エラーがでる

    マクロの記録で以下のようなマクロを作りましたが、実行するとエラー91「オブジェクト変数またはブロック変数が設定されていません」とでます。どう直したらよいでしょうか? Sub Macro6() Columns("A:L").Select Selection.AutoFilter ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _ ("A1:A497"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B2").Select End Sub

  • 下記マクロの意味を教えてください。

    Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。

  • VBA エクセルでオートフィルタをされているデータ

    エクセルでオートフィルタをされているデータを 昇順で並べ替えするコードを取得したのですが ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Add Key:=Range("A1:A5203"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("置換").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With なのですが どれが並べ替えのコードなのでしょうか? ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Clear これはオートフィルタの並べ替えを解除するコードだと思いますが ActiveWorkbook.Worksheets("置換").AutoFilter.Sort.SortFields.Add Key:=Range("A1:A5203"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal これは何のコードでしょう?

  • 同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか

    EXCELVBAであるシートに作業をさせるVBAを作成しました。 同じ作業を複数のシートに 実行させるにはどうしたらいいのでしょうか。 宜しくお願い致します。 **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… *********************************** ↓ sheet1とsheet2に同じ作業をさせたい 以下のやりかただと長くなるためまとめたい    **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet2").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet3").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… ***********************************

  • 【VBA】全てのシートを並び替え 反映せず

    For Each Ws In Worksheets Ws.Activate 「並び替えの処理」 Next Ws を記述したのですが、 「並び替えの処理」を記憶マクロからコピペした為、 ("Sheet1")しか並び替えの処理がされません。(全シート並び替えの処理がしたい) 下記コードをどの様に修正すれば良いでしょうか。 ご教示願います。 '5行目から最終行迄範囲選択し、W列で昇順に並び替え Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("W5:W40") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A5:X40") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

  • エクセルVBAでデータ並べ替え

    マクロ記録をとると次のようになりました。 これをA列をキーに並べるもっと簡単なコードを教えてください。 Range("A2:G501")となっていますが、これ以上でも対応できるようにしたいです。 どなたか教えていただけないでしょうか。 Sub Macro1() Range("A1").Select ActiveWorkbook.Worksheets("***").Sort.SortFields.Clear ActiveWorkbook.Worksheets("***").Sort.SortFields.Add Key:=Range("A1"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("***").Sort .SetRange Range("A2:G501") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub

  • エクセル VBA 各シートに貼り付け

    いつも皆様には大変お世話になっております。 表題に書いたようにコピーしたものを貼り付けしたいのですがうまく動きません。 Sheets("A").Select Range("B8:B38").Select Selection.Copy For Each sh In Worksheets If sh.Name <> "A" Then Range("B12:B42").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("F38").Select ActiveWindow.SmallScroll Down:=-12 End If Next と言った様な構文を書いているのですが Aのファイル内のみでコピーして貼り付けをやってしまいます。 ちなみにシートはB,C,Dなど各種あります。 よろしくお願いいたします。