Excel VBA質問箱 IV

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

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


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

【58778】タイトルがコピペされないようにするには にしもり 08/11/10(月) 1:13 質問[未読]
【58784】Re:タイトルがコピペされないようにするには Jaka 08/11/10(月) 11:28 発言[未読]
【59059】Re:タイトルがコピペされないようにするには にしもり 08/11/25(火) 15:56 質問[未読]
【59063】Re:タイトルがコピペされないようにするには ichinose 08/11/25(火) 20:52 発言[未読]

【58778】タイトルがコピペされないようにするには
質問  にしもり  - 08/11/10(月) 1:13 -

引用なし
パスワード
   こんにちは。
以下では、ファイルAのシート1のセルA2から、ファイルBのシート1のセルA2へ、ファイルAのシート1のセルA3から、ファイルBのシート1のセルA3へ、、
ファイルAのシート1のセルB2から、ファイルBのシート1のセルB2へ、ファイルAシート1のセルB3から、ファイルBのシート1のセルB3へ、、、、
ファイルAのシート1のセルC2から、ファイルBのシート1のセルC2へ、ファイルAのシート1のセルC3から、ファイルBのシート1のセルC3へ、、、、
ファイルAのシート1のセルD2から、ファイルBのシート1のセルD2へ、ファイルAのシート1のセルD3から、ファイルBのシート1のセルD3へ、、、、
と文字列を移しています。

ファイルBの1行目はタイトル行です。

このときたとえばファイルAのシート1のセルB2に文字列が入っていないと、ファイルBのシート1のセルB2に(ブランクのままでよいのに)ファイルBのシート1のセルB1のタイトルが入ってしまいます。どこがいけないからでしょうか?

ロジック自体もな何かもっとループか何かで洗練させることできるでしょうか?
ご教示ください。

Sub Test()

  Dim v 
 
  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("A2", _
      .Cells(.Rows.Count, "A").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("A2").Resize(UBound(v), 1).Value = v
    .Range("A2").Value = v
  End With

  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("B2", _
      .Cells(.Rows.Count, "B").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("B2").Resize(UBound(v), 1).Value = v
    .Range("B2").Value = v
  End With

  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("C2", _
      .Cells(.Rows.Count, "C").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("C2").Resize(UBound(v), 1).Value = v
    .Range("C2").Value = v
  End With

  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("D2", _
      .Cells(.Rows.Count, "D").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("D2").Resize(UBound(v), 1).Value = v
    .Range("D2").Value = v
  End With

  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("E2", _
      .Cells(.Rows.Count, "E").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("E2").Resize(UBound(v), 1).Value = v
    .Range("E2").Value = v
  End With

  With Workbooks("A.xls").Worksheets("Sheet1")
    v = .Range("F2", _
      .Cells(.Rows.Count, "F").End(xlUp)).Value
  End With
  With Workbooks("B.xls").Worksheets("Sheet1")
    .Range("F2").Resize(UBound(v), 1).Value = v
    .Range("F2").Value = v
  End With

 End Sub

【58784】Re:タイトルがコピペされないようにする...
発言  Jaka  - 08/11/10(月) 11:28 -

引用なし
パスワード
   ▼にしもり さん:
>どこがいけないからでしょうか?
って、内容よく読んでないけど、

何も書いてないシートに対して(1行目に何か書いてあってもいいけど)

Range("A2", Cells(Rows.Count, "A").End(xlUp)).Select

とでもやってみれば理由がわかるんじゃないかと思います。

【59059】Re:タイトルがコピペされないようにする...
質問  にしもり  - 08/11/25(火) 15:56 -

引用なし
パスワード
   ▼Jaka さん:
ありがとうございます。調子を崩しておりました。

v = .Range("A2", _
      .Cells(.Rows.Count, "A").End(xlUp)).Value

と書くとDBの下端を指す、つまりデータが無いときタイトル行をさしてしまうのではないかと気づきました。このようなときにSetを用いソースの範囲を予め指定すればいいのでしょうか?

それにしても解せないのは、タイトル行をささないようにRange"A2"とわざわざ記述してるのに"A2"にデータが無いときなぜ"A1"から持ってきてしまうのでしょうか、、、

【59063】Re:タイトルがコピペされないようにする...
発言  ichinose  - 08/11/25(火) 20:52 -

引用なし
パスワード
   こんばんは。


>
>v = .Range("A2", _
>      .Cells(.Rows.Count, "A").End(xlUp)).Value

if v.row>1 then
  '正常にタイトル行以外のセル範囲が取得できた
  end if

なんて方法で私は判断します。


>
>それにしても解せないのは、タイトル行をささないようにRange"A2"とわざわざ記述してるのに"A2"にデータが無いときなぜ"A1"から持ってきてしまうのでしょうか、、、

タイトル行だけのA列にて、

セルA10を選択した後、Ctrl+↑キーを押してみた結果を考察してください。
この操作が

Cells(10, "A").End(xlUp)

ですから・・・・。

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