Excel VBA質問箱 IV

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

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


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

【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 お礼[未読]

【64021】セル内容の結合について
質問  もっこす  - 10/1/10(日) 12:26 -

引用なし
パスワード
   VBA初心者のため、質問させてください。

数万行のデータが並ぶシートがあるのですが、
そこから2列を抜粋して、別シートのA列とB列に貼り付けをして
セル内容の結合をC列に行いたいと思ってます。

A列及びB列のセルには文字が並んでおり、
内容の結合を行う時は、「−(ハイフン)」で結合させるのですが
B列のセルに何もない場合は、
A列のセル内容は、そのままC列のセルに貼り付けたいのです。

手作業では数日かかりますし、
判らないままでやったましたが、
どなたか助けてください。宜しくお願いします。

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

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

>数万行のデータが並ぶシートがあるのですが、
>そこから2列を抜粋して、別シートのA列とB列に貼り付けをして
>セル内容の結合をC列に行いたいと思ってます。

別シートのA列とB列に貼り付けするというのは、
数万行のデータが並ぶシートの抜粋した2列のデータということですか?

・数万行のデータが並ぶシートのシート名
・貼り付け先のシート名
・数万行のデータが並ぶシートの抜粋の2列は、特定できないのか?
 特定できない場合、あらかじめ選択している2列なのか?
 その2列は、連続した2列なのか、離れている2列なのか

を教えてください。

  A   B  C
1    あ  か
2    い  き
3    う  く
4    え
5       こ

    ↓

別シート
  A   B  C
1 あ  か  あ−か
2 い  き  い−き
3 う  く  う−く
4 え     え
5    こ

という感じにしたいのだと思いますが、5行目の場合は、どうすればいいのでしょうか?
「−こ」なのですか?

【64023】Re:セル内容の結合について
発言  もっこす  - 10/1/10(日) 13:26 -

引用なし
パスワード
   かみちゃん さんへ

ご質問、ありがとうございます。
かみちゃん さんがご指摘されるように
別シートには元シートからコピーしたA列とB列を貼り付けています。

複数ある元シート(原本)は変更不可となっていて
それぞれのシートのフィールド名称も曖昧ですし、
列の配置もバラバラなため、そこから対象の列を探して
新しいシートで作業をしている状態です。

元シート名 : 所有者情報
貼り付け先のシート名 : 地番情報 ですが、
その2列を貼り付けたシートで作業ができれば十分です。

A列のそれぞれのセルには必ず内容がありますが
B列には内容が無い場合があります。
つまりA列の最終行だけ処理を行う必要があり、
下記の「5」はありません。

>別シート
>  A   B  C
>1 あ  か  あ−か
>2 い  き  い−き
>3 う  く  う−く
>4 え     え
>5    こ

判りにくい説明をしてしまい、申し訳ありません。

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

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

>別シートには元シートからコピーしたA列とB列を貼り付けています。
>
>複数ある元シート(原本)は変更不可となっていて
>それぞれのシートのフィールド名称も曖昧ですし、
>列の配置もバラバラなため、そこから対象の列を探して
>新しいシートで作業をしている状態です。

「数万行のデータが並ぶシート」は複数あるのですか?
ということは、それぞれのシートで、転記したい2列は、あらかじめ選択してから
1シートずつ処理するということなのでしょうか?

>元シート名 : 所有者情報
>貼り付け先のシート名 : 地番情報 ですが、
>その2列を貼り付けたシートで作業ができれば十分です。

「所有者情報」というのが「数万行のデータが並ぶシート」だと思いますが、
これが複数あるのですか?

>A列のそれぞれのセルには必ず内容がありますが
>B列には内容が無い場合があります。
>つまりA列の最終行だけ処理を行う必要があり、
>下記の「5」はありません。

この店は、了解しましたが、万が一、A列に値がない場合は、
「−こ」というような出力結果になってもよいということでよろしいでしょうか?

【64025】Re:セル内容の結合について
発言  もっこす  - 10/1/10(日) 14:29 -

引用なし
パスワード
   かみちゃん さんへ

重ね重ね申し訳ありません。

>「数万行のデータが並ぶシート」は複数あるのですか?
>ということは、それぞれのシートで、転記したい2列は、あらかじめ選択してから
>1シートずつ処理するということなのでしょうか?
>「所有者情報」というのが「数万行のデータが並ぶシート」だと思いますが、
>これが複数あるのですか?

はい、その対象地域が違いますので
「所有者情報」は複数のExcelシートがありますし、
そのそれぞれが数万件のデータが記載されています。
よって別シートに必要な2つの列をコピーして
作業を行いたいと思っております。

>この店は、了解しましたが、万が一、A列に値がない場合は、
>「−こ」というような出力結果になってもよいということでよろしいでしょうか?

別シート
  A   B  C
1 あ  か  あ−か
2 い  き  い−き
3 う  く  う−く
4 え     え
5    こ

上記でいうとA列の最終行は4行目ですから、
B列の行がA列以上の行になることは絶対にありません。
つまり、B列は4行目までになります。

  A   B  C
1 あ  か  あ−か
2 い     い
3 う  く  う−く
4 え     え

上記のようにB列のセル内容が無い場合は、C列にはそのままA列セルの記載で、
ある場合のみ、その文字をハイフンで結合するということです。

お手数をおかけしますが、宜しくお願い致します。

【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で動作確認してあります。

【64027】Re:セル内容の結合について
お礼  もっこす  - 10/1/10(日) 15:31 -

引用なし
パスワード
   かみちゃん さんへ

マクロ実行で「あれっ?」と思いましたが
元シートが修正不可とのことで、
そのシートまで考慮して頂いたのですね。
本当にありがとうございます。
感謝、感激です!。

これならば、その元シートから貼り付ける手間も省けて
より早く処理できます。

わたくしの説明不足を反省します。

まだまだ基本的な部分が判らず、苦労しておりますが、
少しでもかみちゃん さんらに近付けるよう
記述内容を噛み砕き、勉強したいと思います。
本当にありがとうございました。

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