Excel VBA質問箱 IV

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

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


4829 / 13646 ツリー ←次へ | 前へ→

【54176】データ取得先のファイルが変更するたびに反映先の行を変更するには? かおり 08/2/27(水) 18:01 質問[未読]
【54180】Re:データ取得先のファイルが変更するたび... VBWASURETA 08/2/28(木) 11:08 回答[未読]
【54183】Re:データ取得先のファイルが変更するたび... かおり 08/2/28(木) 14:21 質問[未読]
【54188】Re:データ取得先のファイルが変更するたび... VBWASURETA 08/2/28(木) 18:34 回答[未読]
【54208】Re:データ取得先のファイルが変更するたび... かおり 08/2/29(金) 16:53 お礼[未読]

【54176】データ取得先のファイルが変更するたびに...
質問  かおり  - 08/2/27(水) 18:01 -

引用なし
パスワード
   以前外部エクセルファイルの読み込みの件で質問させていただいた初心者です。

【質問その1】
p://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=53688;id=excel
【質問その2】
p://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=53795;id=excel

前回の質問で、取得したデータを

          A B C D E           F G H I J K L…
1(ファイル1データ)1.,2.,3.,4.,5.,(ファイル2データ)1.,2.,3.,4.,5.,……
2(ファイル1データ)1,9,3,5,5,(ファイル2データ)1,6,7,2,3,……

と、全てのファイルを参照し終えるまで取得した値を右方向に並べるコードを教えていただきました。

  Y = Y + 1
  Worksheets("ワークシート").Cells(1, 1 + Y).Select    
  ActiveCell.FormulaR1C1 = bunrui 'ラベルの名前の部分を表示
  ActiveCell.Offset(1, 0).Select
  ActiveCell.FormulaR1C1 = suuchi ’ラベルの%の部分を表示
  ActiveCell.Offset(-1, 1).Select

今回は、参照先のファイルが変更になると、
反映されるセルの行を変更させたいのですが、どのようにコードを記述すればよろしいのでしょうか?

イメージ的には以下のようにデータを取得させたいです。


          A B C D E
1(ファイル1データ)1.,2.,3.,4.,5.
2(ファイル1データ)1,9,3,5,5
3(ファイル2データ)1.,2.,3.,4.,5.
4(ファイル2データ)1,6,7,2,3
5・
6・
7・


恐れいりますが、ご教授よろしくお願いいたします。(><)

【54180】Re:データ取得先のファイルが変更するた...
回答  VBWASURETA  - 08/2/28(木) 11:08 -

引用なし
パスワード
   ▼かおり さん:
おはようございます。

Worksheets("ワークシート").Cells(1, 1 + Y).Select

多分ここが理解できれば、作れる気がします。

Cellsは"ワークシート"という名前のシートのセル位置を表しています。
つまり、Cells(行番号, 列番号)で表しています。

セルA1の選択例:

'CellsではセルA1の位置は(1, A)というような感じです。
Worksheets("ワークシート").Cells(1, 1).Select


例でわかるかも知れないですが、行番号の位置を変数にして、
参照シートが変われば2行ずれるようにすればできるはずですよ。

【54183】Re:データ取得先のファイルが変更するた...
質問  かおり  - 08/2/28(木) 14:21 -

引用なし
パスワード
   VBWASURETAさん

いつも助けていただき感謝しております。

教えていただいたとおり、行番号の個所に変数を使って行がずれるコードはなんとなくわかったのですが、行番号を変更するコードを書いても、「参照先ファイルが変わってから」という条件ができていないためか、同じ結果が取得されてしまいました;;

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Worksheets("ワークシート").Cells(1, 1).Select
lastrow = Range("B65536").End(xlUp).Row

'変数lastrowを最終書き込みセルの行番号」として宣言後

Worksheets("ワークシート").Cells(lastrow + 1, 1 + Y).Select

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

参照先ファイルは

MyName = Dir(MyPath & "\*.xls") 'xlsファイルすべてを選択対象に

でMyPath直下のエクセルファイル全てを読み込むように指定してありますが、
ここでなんらかの判別処理※が必要なのでしょうか?
※MyNameの値が変わったら処理??


説明下手で申し訳ないですが、またまたご教授よろしくお願い致します。m(_ _;)m

【54188】Re:データ取得先のファイルが変更するた...
回答  VBWASURETA  - 08/2/28(木) 18:34 -

引用なし
パスワード
   ▼かおり さん:

まず確認ですが、以下のところはシートが変わった時にだけ入りますか?
>MyName = Dir(MyPath & "\*.xls") 'xlsファイルすべてを選択対象に


簡単にするのであれば、変数が保持できる形にすれば大丈夫です。

保持例:

'↓この定義をソースの上に書くと保持され続けます。
Dim MyPath As String
'↓この定義もソースの上に書くと保持され続けます。
Dim lSetRow As Long

Sub Main()
 '最初はMyPath中身がないので条件に入る
 If (MyPath = "") Then
  lSetRow = 1 '1最初は1行目
 Else'変更の時はMyPath中身があるのでこの条件に入る
  lSetRow = lSetRow + 2 'シート変更時は2行下げる
 End If
 MyName = Dir(MyPath & "\*.xls")

End Sub


こんな感じでlSetRowをCellsの行番号に入れれば
できると思います。

【54208】Re:データ取得先のファイルが変更するた...
お礼  かおり  - 08/2/29(金) 16:53 -

引用なし
パスワード
   VBWASURETAさん

毎回分かりやすく書いていただき感謝します!

変数lSetRowを行番号として使うことで無事解決しました!!

ほんとうにありがとうございましたm(_ _)m助かりました。

またよろしくお願いいたします(^^)

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