Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3988 / 13644 ツリー ←次へ | 前へ→

【59018】任意の複数列のコピー 新参者 08/11/23(日) 20:39 質問[未読]
【59022】Re:任意の複数列のコピー ponpon 08/11/23(日) 22:45 発言[未読]
【59024】Re:任意の複数列のコピー かみちゃん 08/11/23(日) 22:59 発言[未読]

【59018】任意の複数列のコピー
質問  新参者  - 08/11/23(日) 20:39 -

引用なし
パスワード
   久々に質問させていただきます。
フィルターで抽出された生産履歴が表示された列がA列からQ列まであります。
その中からA列とE列の最終列までをコピーして新規シートにコピーしたいと思います。
マクロで行えば、

range("a1:a10,e1:e10").select
selection.copy

で、できますが、
生産履歴は日々増えていきますのでフィルターで抽出された行は増えていくので、
変数で処理を行うのですが、上記マクロを参考に自分なりに考えたのが、
dim n as integer  最終行を取得
range(range(cells(1,1),cells(n,1)),range(cells(1,5),cells(n,5)))
range((cells(1,1),cells(n,1)),(cells(1,5),cells(n,5)))などと

記述してみましたが、インデックスが違いますとかのエラーが出ます。
その後の処理はマクロを参考にできましたが上記の列の選択方法ができません。
初歩的なものかとは思いますが、よろしくお願いします。
会社ではネットが使えないので自宅で投稿しているのでエラー項目が把握できませんでした。

【59022】Re:任意の複数列のコピー
発言  ponpon  - 08/11/23(日) 22:45 -

引用なし
パスワード
   ▼新参者 さん:
>久々に質問させていただきます。
>フィルターで抽出された生産履歴が表示された列がA列からQ列まであります。
>その中からA列とE列の最終列までをコピーして新規シートにコピーしたいと思います。
>マクロで行えば、
>
>range("a1:a10,e1:e10").select
>selection.copy
>
>で、できますが、
>生産履歴は日々増えていきますのでフィルターで抽出された行は増えていくので、
>変数で処理を行うのですが、上記マクロを参考に自分なりに考えたのが、
>dim n as integer  最終行を取得
>range(range(cells(1,1),cells(n,1)),range(cells(1,5),cells(n,5)))
>range((cells(1,1),cells(n,1)),(cells(1,5),cells(n,5)))などと
>
>記述してみましたが、インデックスが違いますとかのエラーが出ます。
>その後の処理はマクロを参考にできましたが上記の列の選択方法ができません。
>初歩的なものかとは思いますが、よろしくお願いします。
>会社ではネットが使えないので自宅で投稿しているのでエラー項目が把握できませんでした。

新規シートにA:Eまでをコピーし、B:Dを削除したらいけませんか?
以下のコードは、
シート1にあるデータのA列にオートフィルターをかけて
A〜Eまでを新規シートにコピーして、B〜Dまでを削除するコードです。
フィルターをかける列と抽出文字はそちらにあわせてみてください。
参考になればよいのですが・・・

Sub test()
  Dim Nst As Worksheet
 
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
    If .AutoFilterMode = True Then .AutoFilterMode = False
    .Range("A1").CurrentRegion.AutoFilter 1, Criteria1:="a"  'A列の"a"を抽出しています
    With .AutoFilter.Range
       If .Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
        MsgBox "データがありません。" '抽出データがない場合
        Exit Sub
       Else
        .Range(.Columns(1), .Columns(5)).Copy
        Set Nst = Worksheets.Add(after:=Sheets(Sheets.Count))
        With Nst
          .Name = "抽出データ"
          .PasteSpecial
          .Columns("B:D").Delete
        End With
       End If
    End With
    .AutoFilterMode = False
  End With
  Application.ScreenUpdating = True
End Sub

【59024】Re:任意の複数列のコピー
発言  かみちゃん E-MAIL  - 08/11/23(日) 22:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

ponponさんから、コメントがついていますが

>変数で処理を行うのですが、上記マクロを参考に自分なりに考えたのが、
>dim n as integer  最終行を取得
>range(range(cells(1,1),cells(n,1)),range(cells(1,5),cells(n,5)))
>range((cells(1,1),cells(n,1)),(cells(1,5),cells(n,5)))などと
>
>記述してみましたが、インデックスが違いますとかのエラーが出ます。
>その後の処理はマクロを参考にできましたが上記の列の選択方法ができません。

本当にそのコードで
インデックスが違います
というエラーなのでしょうか?
なんとなく、コードもエラーメッセージも違うのではないかと思っています。

ちなみに、以下のような感じだと何か参考になりますでしょうか?

Sub Test()
 Dim n As Integer

 n = 10
 Range(Range(Cells(1, 1), Cells(n, 1)), Range(Cells(1, 5), Cells(n, 5))).Select
 MsgBox Selection.Address

 Union(Range(Cells(1, 1), Cells(n, 1)), Range(Cells(1, 5), Cells(n, 5))).Select
 MsgBox Selection.Address
End Sub

3988 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free