【VBA】可視セルの一部をコピー
- 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)
- オフィス系ソフト
- 回答数1
- ありがとう数3
- みんなの回答 (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
関連する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列づつコピーしては貼り付けている状態です。 もっとスマートな方法がありましたら教えてください。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- 異なる結合セルのコピー
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に計算式を入れるというのは少し難しいです。 どうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- フィルター後、可視セル一部データ参照 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:?) の一部の可視セルを取り出したいのです。 何か良いサイト、方法がありましたら教えてください。 よろしくお願い致します。
- ベストアンサー
- Excel(エクセル)
- 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列で同一文字かどうか分かる方法がわかりませんでした… こういったマクロ出来るでしょうか?? よろしくお願いします
- ベストアンサー
- Visual Basic
- 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列目以降のデータの列数も変動する且つ途中に空欄も含むため)
- 締切済み
- Visual Basic
- 可視ファイルコピーがうまくいかない!!
下記の図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
- ベストアンサー
- オフィス系ソフト
お礼
フィルタオプションではAutoFilterで選択が出来ない為なのか、 >Set rVisible = ActiveSheet.AutoFilter.Range._ >SpecialCells(xlCellTypeVisible) 上記部分でエラーが出ましたが、 Set rVisible = ActiveSheet.Range("A2:B100")._ SpecialCells(xlCellTypeVisible) 上記の様に変えて、無事動かす事ができました。 RangeやFor Each文のいい勉強になりました。 ありがとうございました。