【VBA】可視セルの一部をコピー

このQ&Aのポイント
  • VBAを使用して、特定の条件で可視セルの一部をコピーする方法を教えてください。
  • 部品表一覧の中で、特定のコードを除外し、上位10件をコピーする作業ができません。どのように対応すれば良いでしょうか?
  • フィルタオプションを使用して除外したセルでも、可視セルの一部をコピーする方法はありませんか?
回答を見る
  • ベストアンサー

【VBA】 可視セルの一部をコピー

ある部品表一覧を管理しています。 その中で、一部の頭文字から始まるコードを除外し、除外したうちの上から10番目までをコピーする作業を行いたいのですが、 最初の一部の頭文字から始まるコードを除外するために、フィルタオプションを用いてフィルタリングを行っている為、通常のトップテン抽出が行えません。 その為、CurrentRegionを用いてのコピーでは、上から10番目までをコピーという作業が行う事が出来ません。 どうにかして、可視セルの一部をコピーする事はできないでしょうか? ///// 例 ///// 部品コード 数 A1 10 B1 20 C1 10 C2 20 C3 30 . . C100 1000 D1 10 上記で、A/B/Dから始まる品目を除外したうえで、部品コードC1~C10までをコピーしたい

  • Lambo
  • お礼率48% (12/25)

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 > フィルタオプションを用いてフィルタリングを行っている為、 > 通常のトップテン抽出が行えません。 エラー処理は皆無ですけど一案です。要は、可視セルの行でループ   For Each rRow in rVisible.Rows   Next させて、10行分(見出しを含め11行)コピーしているだけです。 ただ、下記コードではそれを rSrc という Range コレクション にまとめてから、1回のコピーで済ませていますが。 Sub Sample()   Dim rVisible As Range   Dim rSrc   As Range   Dim rRow   As Range   Dim i     As Long       ' // フィルタ可視セル範囲   Set rVisible = ActiveSheet.AutoFilter.Range. _           SpecialCells(xlCellTypeVisible)      i = 0   For Each rRow In rVisible.Rows     i = i + 1     If rSrc Is Nothing Then       Set rSrc = rRow     Else       Set rSrc = Union(rSrc, rRow)     End If     ' // 見出し行を含め行カウンタ i が11行以上でループ終了     If i >= 11 Then Exit For   Next   rSrc.Copy Destination:=Worksheets("Sheet2").Range("A1")   Set rSrc = Nothing   Set rVisible = Nothing End Sub

Lambo
質問者

お礼

フィルタオプションではAutoFilterで選択が出来ない為なのか、 >Set rVisible = ActiveSheet.AutoFilter.Range._ >SpecialCells(xlCellTypeVisible) 上記部分でエラーが出ましたが、 Set rVisible = ActiveSheet.Range("A2:B100")._ SpecialCells(xlCellTypeVisible) 上記の様に変えて、無事動かす事ができました。 RangeやFor Each文のいい勉強になりました。 ありがとうございました。

関連するQ&A

  • 可視セルへのコピー マクロ

    次のように、可視セルから可視セルへコピーしたいです。 (元の状態) A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150 dさん 済    100 eさん 未    120 fさん 済    250 gさん 未    300 hさん 未    210 この状態をB列で支払が済んでるかどうかでフィルターをかけて ABC列をコピーし、DEF列に可視セルのみコピーして A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 cさん 未    150  cさん 未    150 eさん 未    120  eさん 未    120 gさん 未    300  gさん 未    300 hさん 未    210  hさん 未    210 フィルターをはずすと A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150   cさん 未    150 dさん 済    100 eさん 未    120   eさん 未    120 fさん 済    250 gさん 未    300   gさん 未    300 hさん 未    210   hさん 未    210 と、未払いの人だけ、D列以降にもコピーされてる状態にしたいのです。 可視セルへのコピーはマクロを組む必要があると聞いて見てるのですが、 私が実現させたい可視セルへのコピーとまた違うプログラムでした。 どなたかよろしくお願いします。

  • Excel VBA 他のシートからセル範囲をコピー

    宜しくお願いします。 Excel2003でVBAを利用しています。 他のブック内にある(sheet1)のセル範囲(B9:D64)の値を 現在開いているブック内の(sheet8)の指定した位置に貼り付けたいと 思っています。 コピーしたセルはB,C,Dと3列あるのですが、 B列を(sheet8)のB列に、C列を(sheet8)のF列に、 D列を(sheet8)のJ列のそれぞれ12行目を頭にして 貼り付ける、という作業をしたいのです。 上記のようなコピー作業が、列や行がばらばらで50箇所くらい あります。 マクロ記録で、2,3箇所試しにやってみたのですが、 1列づつ、クリップボードを経由して行わなければならず、 冗長なコードになってしまい、もっと良い方法があるのでは ないかと思い、書込みしました。 現在のコードです。 workbook(1).Activate 'コピー元のセルを選択してクリップボードへ Worksheets(sheet1).Range("B9:B64").Copy '1枚目 日付列 '現在のブックを選択して貼り付け ThisWorkbook.Activate Range("B12").Select '1枚目 日付列 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して値を貼り付け 上記のように、1列づつコピーしては貼り付けている状態です。 もっとスマートな方法がありましたら教えてください。 宜しくお願いします。

  • 異なる結合セルのコピー

    A.B.C列の結合セルに文字が入力されています。 その文字を違う表のD.Eの結合セルにコピーをしたいのですが、 「コピー領域と貼り付け領域が違う為コピーできません。」 というメッセージがでます。 A B C  ああ D E  ああ F列を作らないで出来る方法があれば、教えて下さい!! 宜しくお願い致します。

  • VBAで任意の範囲内のセル2個ずつを総当りでコピー

       シートA        シートB           シートC   A  B C D   A B  C   D     A  B   C  D 1 21 22 23 24  21 22 2122 2122'  2122 2122' 2                           2123 2123’ 3                           2124 2124' 4                           2223 2223' (1)シートAのA1、B1をコピーしてシートBのA1、B1に代入する。  シートBのC1、D1には計算式が入っており、結果が表示される。 (2)シートBのC1、D1の計算結果をシートCのA1、B1に代入する。 (3)次はシートAのA1、C1をコピーしてシートBのA1、B1に代入する。  シートBのC1、D1には計算式が入っているので結果が表示される。 (4)計算結果をシートCのA2、B2に代入する。 (5)同じ動作をシートAの一行目に数字がある場合は繰り返し行う。 (6)シートA(A1、B1)(A1、C1)(A1、D1)が終了したら  今度は(B1、C1)(B1、D1)と、  シートAのB1を、シートBのA1とB1に代入して、  計算された結果をシートCのA列、B列に代入していく。 (7)シートAのB1が終了したら、今度は(C1、D1)をシートBのA1、B1に代入し、  計算結果をシートCのA6、B6に代入する。 地域ごとの合併による効果に関する調査で使用したく、 シートAの一行目の数字を総当りさせる事が目的です。 上の説明では、シートAの一行目は4列しかなく、シートCに導き出される計算結果は6行だけですが、 実際の作業はシートAは130列ほどとなり、マクロで作ると8,000回の作業を しなくてはならないため、VBAでいろいろ試してみたのですが、 知識不足でうまくいかないため質問させていただきました。 また、シートBのC1とD1の計算式というのは、 シートBのA1とB1に数値を代入した際に、A列B列の2行目以下に 関数で数字を引っ張ってきて(総人口や産業別就労人口等)、 それらの数値を使った計算なので、シートAに計算式を入れるというのは少し難しいです。 どうぞよろしくお願いいたします。

  • フィルター後、可視セル一部データ参照 VBA

    いつもお世話になっております。 Excel2003を使用しております。 フィルターを掛けたあと、範囲を別シートにコピーする プログラムを組みました。 その際に、一部分だけ持っておきたいのですが どのようにすれば良いでしょうか? たとえば、フィルター後の内容が 名前,テスト1,テスト2,テスト3 A,テスト1,テスト2,テスト3 B,テスト1,テスト2,テスト3 とあったとして、テスト2の内容だけをコピーし Sheet2のA1にコピーすることはできるのでしょうか? 現段階では、 AとBを範囲指定してコピー テスト3を範囲指定してコピー という作業をしております。 -------------------- .Range("F2:F" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select '可視セルの選択 Selection.Copy '可視セルコピー Worksheets("製品別グラフ").Range("A" & j).PasteSpecial 'A列に貼り付け! Excel.Application.CutCopyMode = False 'クリップボードの内容クリア ---------------------------------- このように行っているため、 全範囲選択してコピー…ということはやりたいことと違うため どうしたらいいのか分からず困っています。 可視セルの指定行(A2:?) の一部の可視セルを取り出したいのです。 何か良いサイト、方法がありましたら教えてください。 よろしくお願い致します。

  • VBA 同一文字のコピーについて

    B、C列に1つでも済と入っていれば、A列で同じ社名の行をコピーして別シートに貼り付けする。 というマクロを作りたいと思っています。  A  B   C 1 A社 済 2 A社 済 3 A社 4 B社 5 B社 6 C社 7 C社 8 C社    済 9 C社 10 D社 11 D社    済 この場合、1、2、8、11行目に済と入っているので、B社を除く、 1~3行目と、6~11行目をコピーしたいです。 A列で同一文字かどうか分かる方法がわかりませんでした… こういったマクロ出来るでしょうか?? よろしくお願いします

  • Excelマクロ オートフィルタ可視領域の特定部分をコピー

    何方か、回答をお願いします。 下記もマクロは 、B列:C列(B1:C1はタイトル)をオートフィルタに掛けて フィルタに掛かった一番上のデータをコピーして貼り付けているマクロですが。 やりたいことは、B1:C1のタイトルとフィルタに掛かった可視領域の一番上の データ(オートフィルタに引っかからないでデータが無い場合も有り)をコピー して貼り付けたいのですがどの様なコードを書けば良いのでしょうか。? Sub フィルタ() Range("B1:C1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=">=1e-6" Range("B1").CurrentRegion.Select On Error Resume Next Selection.SpecialCells(xlCellTypeVisible).Areas(2).Rows(1).Select Selection.Copy Range("K15").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter End Sub

  • エクセルVBA、列のコピーについて

    VBAについて助けてほしいことがございます! VBA初心者なので、ひょっとしたらレベルの低い質問かもしれず申し訳ないのですが、VBAに詳しい方がいらっしゃれば教えて欲しいことがあります。 下記の前提を含めた作業内容をVBAのコードとしてまとめる事は出来るのでしょうか? 1列目(A1,B1,C1,D1…)にキー項目(名前、番号、地域、住所、ID…)、2列目以降にキー項目のデータが入力されています。 【作業内容】 「ID」の項目の列には、「番号」の列の文字をコピーして貼りつける(キー項目は上書きせずにIDのまま)。 【前提】 ・キー項目の列は固定されていない(B列が番号の時もあれば、住所の時もある)ので、文字を基準にコピー作業をする ・「キー項目が空欄にぶつかったら、検索を終了」という事をループに入れる(キー項目数は変動するため) ・2列目以降の全てのデータをに張り付ける」という事をコードに入れる(2列目以降のデータの列数も変動する且つ途中に空欄も含むため)

  • 可視ファイルコピーがうまくいかない!!

    下記の図1のようにB列を非表示にた状態のものを 別のシートにコピーペーストをしたいと思います。 編集 ジャンプ 可視セルにチェックをいれてコピー貼り付けを するのですがなぜか失敗してしまいます(下図2のようになってしまいます) なぜだかわかりますか?C列が空白だからでしょうか? ちなみにフィルタもかけていて、A列が7で始まりDが動物で抽出 しています。 図1                A列   C列  D列 E列    7755     かめ  有     7788     うさぎ   図2 A列   C列  D列 E列    7755 かめ  有     7788 うさぎ        

  • シート内の一部のセルを別シートにコピー

    Excelのマクロ(VBA)の記載方法について お分かりになる箇所だけでも結構ですので、 どなたかご教授を願い致します。 シートX   A    B   C  1 data1 data2 data3 2 x   data7 data8 3 data4 data5 data6 4 data7 data8 data9 シート Y   A   B   C    D 1 length 3  (任意) (任意) 2 xxxx (任意) (任意) (任意) 3 zzz  (任意) (任意) (任意) 4 (空白)(任意) (任意) (任意) 上記のような2つのシート(同一Excelファイル内)があって、 シートXの一部のセルを次の条件(1~4)でシートYにコピーしたい場合 1.コピー元の列の数は、シートYの "length"と書かれたセルの右となりの数字   とする(上記では3なので、A,B,C列をコピー対象) 2.コピー元の行の数は、シートXの1~4行目までとするが、   シートXのA列のセルが"x"だったら、その行は全てコピーしない。 3.コピー先(Y)の列は、コピー元(X)の列と一つずれてコピー(BならCに、CならDに) 4.コピー先(Y)の行は、シートYのA列で1行からで始めて空白セルになった行からコピー開始。 (上記では、A列で空白セルのある4行目からコピー) 上記条件で、下記のシートYを作成したいのですが、 この場合どようなマクロ(VBA)で実現できますでしょうか。 コピー結果(シートY)  A     B   C   D 1 length  3  (任意) (任意) 2 xxxx  (任意) (任意) (任意) 3 zzz   (任意) (任意) (任意) 4 (空白) data1 data2 data3 5 (任意) data4 data5 data6 6 (任意) data7 data8 data9

専門家に質問してみよう