Excel VBA質問箱 IV

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

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


18149 / 76732 ←次へ | 前へ→

【64026】Re:セル内容の結合について
発言  かみちゃん E-MAIL  - 10/1/10(日) 15:12 -

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

>>「所有者情報」というのが「数万行のデータが並ぶシート」だと思いますが、
>>これが複数あるのですか?
>
>はい、その対象地域が違いますので
>「所有者情報」は複数のExcelシートがありますし、
>そのそれぞれが数万件のデータが記載されています。
>よって別シートに必要な2つの列をコピーして
>作業を行いたいと思っております。
>
>>この店は、了解しましたが、万が一、A列に値がない場合は、
>>「−こ」というような出力結果になってもよいということでよろしいでしょうか?
>
>別シート
>  A   B  C
>1 あ  か  あ−か
>2 い  き  い−き
>3 う  く  う−く
>4 え     え
>5    こ
>
>上記でいうとA列の最終行は4行目ですから、
>B列の行がA列以上の行になることは絶対にありません。
>つまり、B列は4行目までになります。

4行目までの間のA列に値がない場合が万が一あった場合は、
「−こ」というような出力結果になってもよいということであれば、以下のような感じでできると思います。

なお、マクロを実行すると、1列目と2列目の選択を求める表示が出ますので、
その時点で、転記元の列のセルを1列ずつ選択してください。

Sub Sample()
 Dim rng1 As Range
 Dim rng2 As Range
 Dim rng3 As Range
 Dim i As Long
 Dim v1 As Variant
 Dim v2 As Variant
 Dim vntResult As Variant
 Dim lngRow As Long
' Dim lngColumn As Long
 Dim lngMaxRow As Long
 
 For i = 1 To 2
  On Error Resume Next
  Set rng2 = Application.InputBox(i & "列目のセルを選択してください", Type:=8)
  On Error GoTo 0
  If rng2 Is Nothing Then
   MsgBox i & "列目の選択をキャンセしました"
   Exit Sub
  End If
  If rng2.Columns.Count > 1 Then
   MsgBox i & "列目が複数列選択されていますので、処理を中止します"
   Exit Sub
  End If
  If i = 1 Then
   Set rng1 = rng2
   With rng1
    lngMaxRow = .Offset(.Parent.Rows.Count - .Row).End(xlUp).Row
   End With
  End If
 Next
 
 v1 = rng1.EntireColumn.Cells(1, 1).Resize(lngMaxRow).Value
 v2 = rng2.EntireColumn.Cells(1, 1).Resize(lngMaxRow).Value
 
 ReDim vntResult(1 To lngMaxRow, 1 To 3)
 For lngRow = 1 To lngMaxRow
  vntResult(lngRow, 1) = v1(lngRow, 1)
  vntResult(lngRow, 2) = v2(lngRow, 1)
  vntResult(lngRow, 3) = v1(lngRow, 1)
  If v2(lngRow, 1) <> "" Then
   vntResult(lngRow, 3) = vntResult(lngRow, 3) & "−" & v2(lngRow, 1)
  End If
 Next
 
 With Sheets("Sheet2").Range("A1")
  Set rng3 = .Offset(.Parent.Rows.Count - .Row).End(xlUp)
 End With
 If rng3.Value <> "" Then
  Set rng3 = rng3.Offset(1)
 End If
 rng3.Resize(lngMaxRow, 3).Value = vntResult
End Sub

Excel2002で動作確認してあります。

1 hits

【64021】セル内容の結合について もっこす 10/1/10(日) 12:26 質問
【64022】Re:セル内容の結合について かみちゃん 10/1/10(日) 12:40 発言
【64023】Re:セル内容の結合について もっこす 10/1/10(日) 13:26 発言
【64024】Re:セル内容の結合について かみちゃん 10/1/10(日) 13:50 発言
【64025】Re:セル内容の結合について もっこす 10/1/10(日) 14:29 発言
【64026】Re:セル内容の結合について かみちゃん 10/1/10(日) 15:12 発言
【64027】Re:セル内容の結合について もっこす 10/1/10(日) 15:31 お礼

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