
No.5ベストアンサー
- 回答日時:
No4です。
すみません。前回のは破棄してください。
前回のは途中に空白行があると正しく動作しません。
こちらを使用してください。
Option Explicit
Public Sub 統合処理()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim maxrow As Long
Dim wrow As Long
Dim row3 As Long
Dim new_str As String
Dim prev_str As String
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set ws3 = Worksheets("Sheet3")
ws2.Cells.ClearContents
maxrow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
ws2.Range("A1").Resize(maxrow, 4).Value = ws1.Range("A1").Resize(maxrow, 4).Value
ws3.Range("A1").Resize(maxrow, 4).Value = ws1.Range("A1").Resize(maxrow, 4).Value
ws3.Rows("2:" & Rows.Count).ClearContents
ws2.Range("A1").Resize(maxrow, 4).Sort key1:=ws2.Range("A1"), Header:=xlYes
prev_str = ""
row3 = 1
For wrow = 2 To maxrow
new_str = ws2.Cells(wrow, "A").Value
If new_str <> prev_str Then
row3 = row3 + 1
ws3.Cells(row3, "A").Resize(1, 4).Value = ws2.Cells(wrow, "A").Resize(1, 4).Value
Else
ws3.Cells(row3, "C").Value = ws3.Cells(row3, "C").Value & vbLf & ws2.Cells(wrow, "C").Value
ws3.Cells(row3, "D").Value = ws3.Cells(row3, "D").Value & vbLf & ws2.Cells(wrow, "D").Value
End If
prev_str = new_str
Next
MsgBox ("完了")
End Sub
確認、連絡が遅くなり申し訳ありません。
希望通りの実行結果が得られました。
自分ではとても考えつかきませんでした。
しかももっと長くなるものだと思っておりましたので、こんなに短く作成できるものなんだと驚いております。
厚く御礼申し上げますm(__)m
No.4
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 統合処理()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim maxrow As Long
Dim wrow As Long
Dim row3 As Long
Dim new_str As String
Dim prev_str As String
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set ws3 = Worksheets("Sheet3")
ws1.Range("A1").CurrentRegion.Copy ws2.Range("A1")
ws1.Range("A1").CurrentRegion.Copy ws3.Range("A1")
ws3.Rows("2:" & Rows.Count).ClearContents
ws2.Range("A1").CurrentRegion.Sort key1:=ws2.Range("A1"), Header:=xlYes
maxrow = ws2.Cells(Rows.Count, "A").End(xlUp).Row
prev_str = ""
row3 = 1
For wrow = 2 To maxrow
new_str = ws2.Cells(wrow, "A").Value
If new_str <> prev_str Then
row3 = row3 + 1
ws3.Cells(row3, "A").Resize(1, 4).Value = ws2.Cells(wrow, "A").Resize(1, 4).Value
Else
ws3.Cells(row3, "C").Value = ws3.Cells(row3, "C").Value & vbLf & ws2.Cells(wrow, "C").Value
ws3.Cells(row3, "D").Value = ws3.Cells(row3, "D").Value & vbLf & ws2.Cells(wrow, "D").Value
End If
prev_str = new_str
Next
MsgBox ("完了")
End Sub
No.3
- 回答日時:
No1です。
画像のアップありがとうございました。
補足要求です。
1.シート名ですが、以下の通りで良いですか。
変更前:Sheet1
並び変えたシート:Sheet2
A列が同じ行だけ抽出したシート:Sheet3
2.元のシートに見出し行はないと考えて良いですか。
(1行目からデータの前提で良いですか)
結果的に、他のシートも、見出し行はなくなります。
3.「A列が同じ行だけ、別シートに抽出」ということは、
A列に同じ行がないデータ(A列に同じ値が1件しかない行)は、別シートに出力しなくて良いのでしょうか。
それとも、1件しかなくても、別シートに出力するのでしょうか。
4.B列についてですが、提示されたサンプルをみると、
A列が同じときB列も同じ値になっています。B列が異なるときは、B列のセル内に2行のデータを格納すると考えて良いですか。
例(先頭を1行目とします)
A1 B1
share_mail1 sharemail1@xxxx.col.jp
A3 B3
share_mail1 sharemail1@xxxx.col.jp
となっていますが、
B3の値が
sharemail1@zzzz.col.jp
のような場合です。
Sheet3へ出力するのは、
A1 B1
share_mail1 sharemail1@xxxx.col.jp
sharemail1@zzzz.col.jp
として良いですか。
それとも、A列が同じ場合、無条件にB列も同じになるとみなして良いのでしょうか?
その場合はsharemail1@zzzz.col.jpを無視して
A1 B1
share_mail1 sharemail1@xxxx.col.jp
と出力します。
5.A列が同じのでソートしたとき、C列とD列は必ず異なっているという前提で良いですか。
例としてSheet1に以下のようなデータがあった場合でも
A列 B列 C列 D列
share_mail1 sharemail1@xxxx.col.jp 田中太郎 taro.tanaka@xxxx.co.jp
share_mail1 sharemail1@xxxx.col.jp 田中太郎 taro.tanaka@xxxx.co.jp
share_mail1 sharemail1@xxxx.col.jp 田中太郎 taro.tanaka@xxxx.co.jp
share_mail1 sharemail1@xxxx.col.jp 田中太郎 taro.tanaka@xxxx.co.jp
Sheet3へ出力するのは
A1 B1 C1 D1
share_mail1 sharemail1@xxxx.col.jp 田中太郎 taro.tanaka@xxxx.co.jp
田中太郎 taro.tanaka@xxxx.co.jp
田中太郎 taro.tanaka@xxxx.co.jp
田中太郎 taro.tanaka@xxxx.co.jp
になります。
(C1セル内に4行のデータ、D1セル内に4行のデータ)
お忙しい中、ご確認いただきありがとうございます。
いただきました追加質問については
以下が回答となります。
■1について
いただいた通りでOKです。
■2について
1行目は可能であれば「見出し行」にしたいと考えています。
しかし、手間であれば、無くても問題ありません。
■3について
1件だけの場合も含めて出力したいと考えております。
■4について
失礼いたしました。データがおかしかったようです。
A列が同じ場合、無条件にB列も同じになるとみなしていただいてOKです。
■5について
記載いただいた通りの認識です。
>A列が同じのでソートしたとき、C列とD列は必ず異なっているという前提です。
(C1セル内に4行のデータ、D1セル内に4行のデータ)
No.2
- 回答日時:
こんばんは
手作業でもほとんど手間はかからないと思いますので、以下は手作業での例です。
(マクロはNo1様が回答してくださると思いますので・・)
添付画像が見えないので、文章だけからの回答になりますが・・・
(FILTER関数が使える環境と仮定しています)
1)A列を(仮に)E列にコピペ
2)そのまま、「データ」―「重複の削除」で一意のリストを作成
3)F1セルに
=TEXTJOIN(CHAR(10),1,FILTER(B:B,$A:$A=$E1))
を入力し、G1にフィルコピー
4)F1:G1を選択状態で、右下のフィルハンドルをダブルクリック
(下方に、E列の値がある範囲までフィルコピーされます)
以上で、基本的にできると思います。
セルの表示を「折り返して~」や行の高さを「自動調節」等にしておくと良いでしょう。
4)までの操作は、1~2分もあれば十分と思います。
対象が2000行あると、4)の作業後にエクセルが計算するのに若干時間を要するかも知れません。
※ 上記の結果は関数値になっているので、固定値にしたければ、E:G列を選択し「コピー」-「値をペースト」することで固定文字列にすることができます。
ご教授いただき、ありがとうございます。
本番環境では教えていただいた関数が使えるのは確認出来ているのですが、私個人の環境では確認が出来ません。
その為、後日確認致します。
No.1
- 回答日時:
画像がよく見えません。
画像をこのサイトへアップすると荒い画像になってしまします。gyazo.comへアップされてみてはいかがでしょうか。
下記はgyazo.comへアップしたサンプルです。(画像の内容は本件とは関係ありません)
https://gyazo.com/d54a2d86b804590f4d05fc100a862572
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
EXCELで 一桁の数値を二桁に
-
エクセルで、列の空欄に隣の列...
-
エクセル(勝手に太字になる)
-
エクセル 文字数 多い順 並...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
エクセルの表から正の数、負の...
-
2つのエクセルのデータを同じよ...
-
エクセルのセル内の文字の一部...
-
VBA 連続行データを5行ずつ隣の...
-
【VBA】特定列に文字が入ってい...
-
VBAでセル入力の数式に変数を用...
-
文字列に数字を含むセルを調べたい
-
お店に入るために行列に並んで...
-
Excel 文字列を結合するときに...
-
文字を入力したら数値が自動入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
EXCELで 一桁の数値を二桁に
-
Excelで半角の文字を含むセルを...
-
2つのエクセルのデータを同じよ...
-
エクセル 文字数 多い順 並...
-
エクセルで文字が混じった数字...
-
エクセルで最初のスペースまで...
-
「B列が日曜の場合」C列に/...
-
エクセル(勝手に太字になる)
-
エクセルの項目軸を左寄せにしたい
-
Excel 文字列を結合するときに...
-
エクセルのセル内の文字の一部...
-
【VBA】特定列に文字が入ってい...
-
Excel、市から登録している住所...
-
文字列に数字を含むセルを調べたい
-
エクセルの表から正の数、負の...
-
VBAで文字列を数値に変換したい
-
エクセルで、列の空欄に隣の列...
-
オートフィルターをかけ、#N/A...
おすすめ情報
画像が追加でアップできなかったので、教えていただいたサイトにアップしなおしました。
https://gyazo.com/9ed0b7435406250c8e16e743e483b054