Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
入力してある最終列までインポートしたい
投稿日時: 17/12/27 11:49:15
投稿者: TANPOPO

エクセルファイルが2つあります。
フォーマット.xlsx
回答処理一覧.xlsm
 
回答処理一覧.xlsmにフォーマット.xlsxのデータのインポートをしています。
 
今までは下記のコードで6行目に入力されたデータをインポートしていたのです。

        'A 受理日時
        Workbooks(sBookName2).Worksheets(sSheetName2).Range("A6").Copy Workbooks(sFileName).Worksheets(sSheetName).Range("A" & maxrow)
                            
        'B 依頼内容
        Workbooks(sBookName2).Worksheets(sSheetName2).Range("B6").Copy Workbooks(sFileName).Worksheets(sSheetName).Range("B" & maxrow)

 
今まで
フォーマット.xlsx
    A        B
7    2017/12/12    あああ    
8    2017/12/12    いいい
9    2017/12/10    ううう
 

 
回答処理一覧.xlsm
    A        B
123    2017/12/12    あああ    
124    
125    
 
今後は7行目8行目・・・と複数列にもデータを入力したらした分だけインポートするようにしたいのです。
 
こうしたい
フォーマット.xlsx
    A        B
7    2017/12/12    あああ    
8    2017/12/12    いいい
9    2017/12/10    ううう
 

 
回答処理一覧.xlsm
    A        B
123    2017/12/12    あああ    
124    2017/12/12    いいい
125    2017/12/10    ううう
 
 
どのようにしたら良いのでしょうか。
宜しくお願い致します

回答
投稿日時: 17/12/27 12:38:47
投稿者: もこな2

う〜ん。投稿を拝見しましたけど、何をされたいのかわかりません。
タイトルおよび、説明文中にある「列」が「行」の書き誤りであるなら解りますけど・・・・そういうことでしょうか?

投稿日時: 17/12/27 12:54:05
投稿者: TANPOPO

もこな2 さん、
申し訳ありません。
最終行の間違いです。
ご指摘ありがとうございます。

回答
投稿日時: 17/12/27 13:26:38
投稿者: もこな2

このような感じでいけるとおもいます。
※「maxrowga」がドコで定義されているかわからないので そのままにしてあります。
 適宜修正してください。

Sub Sample()

'==変数宣言とか
Dim 最終行 As Long
Dim WS As Worksheet
Set WS = Workbooks(sFileName).Worksheets(sSheetName)

'==主処理
With Workbooks(sBookName2).Worksheets(sSheetName2)
    最終行 = .Cells(.Rows.Count, "A").End(xlUp).Row
    'A 受理日時
        .Range(.Cells(6, "A"), .Cells(最終行, "A")).Copy WS.Range("A" & maxrow)
    'B 依頼内容
        .Range(.Cells(6, "B"), .Cells(最終行, "B")).Copy WS.Range("B" & maxrow)
End With

'==後処理(好みで省略可)
Set WS = Nothing

End Sub

基本的に、Copyメソッドは通常操作でコピー(&ペースト)をやったときと挙動は変わりません。
ですので、たとえば通常操作で「A1〜B10」をコピーして、「C5」をクリックして貼付すると「C5〜D14」にペーストできると同じように、範囲をコピーして、貼付先を単一セルにしてやれば、勝手に拡張して貼り付けてくれます。
なので、ご質問のようにA〜B列というように隣り合っていれば、以下のように1回の処理にまとめることができます。
.Range(.Cells(6, "A"), .Cells(最終行, "B")).Copy WS.Range("A" & maxrow)

投稿日時: 17/12/27 17:07:21
投稿者: TANPOPO

もこな2さん
 
ありがとうございます。
やりたいことができました。
 
解説も非常にわかりやすく、優しさが伝わってきました。
勉強になりました。
ありがとうございました。