質問投稿でgooポイントが当たるキャンペーン実施中!!>>

エクセルで、列内の連続した文字を一気に結合したい

どういうことかといいますと、例えば列内に
Aさん
Aさん
Aさん
Aさん
Bさん
Bさん
Bさん
Bさん
Bさん
Cさん
Cさん
Cさん
Cさん
Cさん
という列があったとして、セルの結合を行い、一度に
Aさん
Bさん
Cさん
という風にしたいのです。

簡単に行える方法はないでしょうか。

よろしくお願いいたします。

「エクセルで、列内の連続した文字を一気に結」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (9件)

質問通りにセルを結合するようにしてみました。


 
 作って気が付いたんですが、入力したデータを直接結合すると、結合を解除したときに1件を残して空白になってしまいます。結合を解除して修正後、最後結合とかができなくなります。
 
 また、結合済みデータに修正を加えると、再度結合しようとすると重複データが削除されているのでうまくいかない場合が発生します。コピーデータを結合し、元データは非表示にしておくとかが一般的でしょうか。
 
質問者様の考えが分からないので、出力列を指定するようにしています。
 
モジュールの
   '選択列からこの数値分離れた右列に出力
   Const wrtCol = 2

の数値分離れた右列(この場合は2列右)に出力します。「0」にすれば選択したセル範囲を直接結合します。
 
 
ALT+F11を押してVBE画面で挿入メニューから標準モジュールを挿入します。
下記「Sub以下」を標準モジュールに貼り付けます。(今は元データの2列右に出力します)
 
シートに戻り、結合したいセル範囲を選択し、開発タブ>マクロ>マクロ名から「セルの結合」 を選択して実行します。

Sub セルの結合()
  '選択列からこの数値分離れた右列に出力
  Const wrtCol = 2
  
  Dim rw As Integer '行カウンタ

  '確認メッセージを非表示
  Application.DisplayAlerts = False

  '出力位置にコピーする
  Selection.Copy Selection.Offset(0, wrtCol)
  
  'コピーしたデータを結合する
  Selection.Offset(0, wrtCol).Select
  With Selection
    For rw = .Rows.Count To 2 Step -1 '下から結合
      If .Cells(rw) = .Cells(rw - 1) Then
        .Cells(rw - 1).Resize(2).Merge
        .Cells(rw - 1).VerticalAlignment = xlCenter
      End If
    Next
  End With
  
  '確認メッセージを表示するように戻す
  Application.DisplayAlerts = True
End Sub
    • good
    • 1

どうしても結合したいとして、手動でのちょっと効率的なやり方としては



まず、Aさんを全部選択して結合する→結合セルを選択してホームタブの書式のコピー/貼り付けボタン(刷毛のアイコン)をダブルクリックする。

その状態で次にBさんのセルを範囲選択する→Cさんのセルを範囲選択・・・

終わったら、アイコンを再度押すかEscキーを押す。

数がいくつあるかわかりませんので手動でできる範囲なら・・・
    • good
    • 1

質問の「結合」が主目的なのかよく分かりませんが、セルを結合すると複数の文字列を一カ所に集める必要があるわけですが、文字列を複数セル範囲で結合したりする関数がなく、しょうがなくVBAを使ったりします。

逆に、VBAを使うと実行処理が必要だったり、ユーザー定義関数を作っても、それなりに応用できる必要があります。ということで、セルを結合しない方法を考えてみました。


質問の添付図を見ると、左の一覧に対し右の名前はその同じ名前の縦の中央あたりにあるのでそのようにしています。5人だったら3番目の行、4人は2番目、3人は2番目、2、1人は最初の行に表示します。

●算式による対応(添付図の左)
 添付図のセルD2
  =IF(COUNTIF($B$2:B2,B2)=INT((COUNTIF(B:B,B2)+1)/2),B2,"")
 
   下にコピーします。
 
 
●条件付き書式による対応(添付図の右)
 G列にデータを配置しています。
 
 セルG2の条件付き書式の設定は、
 数式を使用して、書式設定するセルを決定で数式は、
  =COUNTIF($G$2:G2,G2)<>INT((COUNTIF(G:G,G2)+1)/2)

 書式はフォントの色を白にしています。
   下に書式をコピーします。


ご参考に。
「エクセルで、列内の連続した文字を一気に結」の回答画像7
    • good
    • 0

準備:


A列にA1からデータを並べておく

手順:
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
 dim r as long
 application.displayalerts = false
 for r = range("A65536").end(xlup).row to 2 step -1
  if cells(r, "A") = cells(r - 1, "A") then cells(r - 1, "A").resize(2, 1).merge
 next r
 application.displayalerts = true
end sub

ファイルメニューから終了してエクセルに戻る
ALT+F8を押し、マクロを実行する。
    • good
    • 9

No4です。



いつのまにやら画像が表示されましたが、画像を見る前のマクロですのでデータはA列にあるものとして書いています。

("a1:A" & Range("a"
Range("A" & frow & ":A" & c.Row).Select

上記の部分のaやAを該当の列に変更してください。aとAは取り立てて区別しているわけではありません。すべてAでよろしいです。
    • good
    • 1

-----------------



Aさん


-----------------


Bさん


------------------



Cさん


------------------


みたいにしたいということでしょうか。

マクロです。ALT+F11を押して左側に出ているその操作をしたいシート名をダブルクリックすると右に白い画面が出るのでそこに下記のコードをコピペしてください。エクセル2013で作成しましたがたぶん2007以降だと動くと思います。2003だと無理かもしれません。表示タブの右の端のマクロでマクロの表示でExampleを実行してください。ただし、実行した後に元には戻せませんので、元のファイルをコピーしたものでテストしてください。

Sub Example()
Dim c As Range
Dim frow As Long

Application.DisplayAlerts = False
frow = 1
For Each c In Range("a1:A" & Range("a" & Rows.Count).End(xlUp).Row)
If c.Value <> c.Offset(1, 0).Value Then
Range("A" & frow & ":A" & c.Row).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
frow = c.Row + 1
End If
Next
Application.DisplayAlerts = True
End Sub
    • good
    • 2

結合したいのはどうしてですか?


私はあまり結合はお勧めしないので、例えば上のセルと同じデータなら文字色を白にするという条件付き書式を設定するなどでは如何でしょうか?

もし、ご要望のことを一度にやるならVBAになるかと思います。

この回答への補足

VBAですか、、よくわかっていないものでして、、
条件付き書式は考えておりませんでした。
ありがとうございます。

補足日時:2014/06/11 01:03
    • good
    • 0

「セルの結合」なんてな言葉を発しておられるけど、誤解してませんか?


「という風にしたい」として示されたものは、単に、“重複”するデータを“無重複”データにしたとしか見えません。
「という列」のどのセルとどのセルを結合したら「という風に」なるのですか?

この回答への補足

説明が足りず申し訳ありません。
例ではありますが図のように、
列内に同一の文字が連続し、それを一つ一つドラッグし、セルを結合する、という作業は非常に時間がかかります。
そのため、画像の矢印の右列内のようなセルの結合を一度にやれないか、という質問でした。

補足日時:2014/06/11 01:02
    • good
    • 0

重複したデータを整理したいという事でしょうか



2007以降だとデータタブに重複の削除というものがありますのでそちらで対応できます。
2003だと以下のページを参考にしてください
http://allabout.co.jp/gm/gc/376556/2/

この回答への補足

ありがとうございます、
実は、重複の削除、ではなく同じ列内にある、同じ値(文字)を一気に結合させたいんです。
ドラッグして結合を何度もやるのはきついので。。。

補足日時:2014/06/11 00:23
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル2007 同一データが連続したセルの結合について

はじめて投稿させていただきます。
うまく説明できるかどうか判りませんが、よろしくお願いします。
エクセル2007 で以下のような結果を得られるようなマクロを作りたいと考えています。
横方向にA列~C列の3つの連続したセル内容が同一で縦方向に2つ以上連続した場合のみ、それらの行を結合させたいのです。具体的には下図のような感じです。
何かよい方法があればアドバイスいただきたいと思います。どうかよろしくお願いします。

A列     B列     C列     D列
機種     区分    ユーザー名   納品数

ABC     あああ    田中商店    10
ABC     あああ    田中商店    20
ABC     あああ    田中商店    30
XYZ      いいい    田中商店    25
XYZ      ううう     山田商事    40

       ↓ ↓ ↓ ↓ ↓



A列     B列     C列     D列
機種     区分    ユーザー名   納品数

                           10
ABC     あああ    田中商店    20
                           30
XYZ     いいい    田中商店    25
XYZ     ううう     山田商事    40

はじめて投稿させていただきます。
うまく説明できるかどうか判りませんが、よろしくお願いします。
エクセル2007 で以下のような結果を得られるようなマクロを作りたいと考えています。
横方向にA列~C列の3つの連続したセル内容が同一で縦方向に2つ以上連続した場合のみ、それらの行を結合させたいのです。具体的には下図のような感じです。
何かよい方法があればアドバイスいただきたいと思います。どうかよろしくお願いします。

A列     B列     C列     D列
機種     区...続きを読む

Aベストアンサー

エクセルは表計算ソフトです。見た目よりも機能がよく働くように維持することが必要でしょう。その点でセルの結合はそのあとの計算処理を複雑にします。できればセルの結合はしないことですね。
どうしてもということであれば次のようなマクロはどうでしょう。
結合のときに注意が表示されますがOKすればよいでしょう。
Sub セルの結合()
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
i = 0
Do
i = i + 1
If Range("A" & i) & Range("B" & i) & Range("C" & i) = Range("A" & i + 1) & Range("B" & i + 1) & Range("C" & i + 1) Then
n = 0
Do
n = n + 1
Loop Until Range("A" & i) & Range("B" & i) & Range("C" & i) <> Range("A" & i + n) & Range("B" & i + n) & Range("C" & i + n)
Range(Range("A" & i), Range("A" & n - 1 + i)).MergeCells = True
Range(Range("B" & i), Range("B" & n - 1 + i)).MergeCells = True
Range(Range("C" & i), Range("C" & n - 1 + i)).MergeCells = True
i = n - 1 + i
End If
Loop While i < Range("a65536").End(xlUp).Row
Application.ScreenUpdating = True
End Sub

エクセルは表計算ソフトです。見た目よりも機能がよく働くように維持することが必要でしょう。その点でセルの結合はそのあとの計算処理を複雑にします。できればセルの結合はしないことですね。
どうしてもということであれば次のようなマクロはどうでしょう。
結合のときに注意が表示されますがOKすればよいでしょう。
Sub セルの結合()
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
i = 0
Do
i = i + 1
If Range("A" & i) & Range("B" & i) & Range("C" & i) = Range("A"...続きを読む

QEXCELで同じ値のセルを結合したいのですが。。。

よろしくお願いします。
OSはwindows2000で、EXCEL2000を使用しています。

A列内に数字が昇順に入っています。
数字によって、行数がばらばらで1~1000の値が入っていますが、全体では、5000行のデータです。
同じ値のセルを結合したいのです。
現状は、1から順に選択して、セルの結合しています。
早く出来る方法ありますか?
よろしくお願いします。

Aベストアンサー

セルの値に関係無いセルの結合を関数式で左右する(結合やその解除)ことは出来ません。従ってVBAにならざるを得ません。
A列が数値でその値順にソートされている場合
下記を実行すると出来るでしょう。
ツール-マクロ-VBE画面になり、メニューの挿入-標準モジュールの画面に下記を貼りつけ、実行する。
Sub test01()
Application.DisplayAlerts = False
d = Range("A65536").End(xlUp).Row
m = Cells(1, "A")
s = 1
For i = 2 To d
If m <> Cells(i, "A") Then
Range(Cells(s, "A"), Cells(i - 1, "A")).MergeCells = True
s = i
m = Cells(i, "A")
End If
Next i
If i - 1 > s Then
Range(Cells(s, "A"), Cells(i - 1, "A")).MergeCells = True
End If
Application.DisplayAlerts = True
End Sub

セルの値に関係無いセルの結合を関数式で左右する(結合やその解除)ことは出来ません。従ってVBAにならざるを得ません。
A列が数値でその値順にソートされている場合
下記を実行すると出来るでしょう。
ツール-マクロ-VBE画面になり、メニューの挿入-標準モジュールの画面に下記を貼りつけ、実行する。
Sub test01()
Application.DisplayAlerts = False
d = Range("A65536").End(xlUp).Row
m = Cells(1, "A")
s = 1
For i = 2 To d
If m <> Cells(i, "A") Then
Range(Cells(s, "A"), Cells(i - 1, ...続きを読む

Q行方向の同じ値のセルを結合するマクロ

ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ
を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。

どうぞよろしくお願いいたします。

Sub セル結合()


Dim r As Integer '行数
Dim i As Integer 'カウンタ

r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1

Application.DisplayAlerts = False

For i = 1 To r
Cells(i, 1).Activate '項目の一つ下のセルをアクティブに
If ActiveCell.Value = ActiveCell.Offset(1).Value Then
Range(ActiveCell, ActiveCell.Offset(1)).Merge
End If

Next
Application.DisplayAlerts = True
End Sub

ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ
を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。

どうぞよろしくお願いいたします。

Sub セル結合()


Dim r As Integer '行数
Dim i As Integer 'カウンタ

r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1

Application.DisplayAlerts = False

For i = 1 To r
Cells(i, 1).Activate '項目の一つ下のセルをアクティブに
If ActiveCell.Value = ActiveCell.Offset(1).Value Then
...続きを読む

Aベストアンサー

こんな感じでどうでしょうか。

Dim c As Range
Application.DisplayAlerts = False
For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))
If c.MergeArea(1).value = c.Offset(1).value Then
Range(c.MergeArea, c.Offset(1)).Merge
End If
Next
Application.DisplayAlerts = True

Q【エクセル】自動で、同じ内容のセルを結合させたい。

ある縦1列に(A01が5行、A02が8行・・・
G32が4行といったように)規則的に
並んでいる複数の分類番号があるとして、
これら同じ分類番号を見やすくするために、
今は一つ一つ手動でセル結合しています。

もし、自動的に、同じ分類番号を一つのセルに
結合してくれるようなやり方があったら・・・
と思うのですが、何かお知恵を拝借できないでしょうか?

Aベストアンサー

VBAプログラムを書いてみました。
上から順に見ていって、内容の異なるセルがあれば、そこより上を結合する、という手順にしてあります。
数値は文字列として処理します。細かいチューニングはしていません。適当にアレンジしてください。

Sub セルの結合()
  Dim 行, 対象列, 開始行 As Long
  Dim 上のセルの内容, このセルの内容 As String
  Dim 対象シート As Worksheet

  対象列 = 1 '・・・(数字で指定)
  開始行 = 1 '・・・(数字で指定)
  Set 対象シート = Sheets("Sheet1") '名前で指定

  With 対象シート
    行 = 開始行 + 1
    上のセルの内容 = .Cells(行, 対象列)
    Do While Not (IsEmpty(.Cells(行 - 1, 対象列)) And IsEmpty(.Cells(行, 対象列)))
      このセルの内容 = .Cells(行, 対象列)
      If このセルの内容 <> 上のセルの内容 Then
        If 開始行 < 行 - 1 Then
          .Cells(開始行 + 1, 対象列).Resize(行 - 開始行 - 1, 1).ClearContents
        End If
        .Cells(開始行, 対象列).Resize(行 - 開始行, 1).Merge
        開始行 = 行
        上のセルの内容 = .Cells(開始行, 対象列)
      End If
      行 = 行 + 1
    Loop
  End With
End Sub

VBAプログラムを書いてみました。
上から順に見ていって、内容の異なるセルがあれば、そこより上を結合する、という手順にしてあります。
数値は文字列として処理します。細かいチューニングはしていません。適当にアレンジしてください。

Sub セルの結合()
  Dim 行, 対象列, 開始行 As Long
  Dim 上のセルの内容, このセルの内容 As String
  Dim 対象シート As Worksheet

  対象列 = 1 '・・・(数字で指定)
  開始行 = 1 '・・・(数字で指定)
  Set 対象シート = Sheets("Sh...続きを読む

Q【エクセル】1列内に複数ある同項目を、各項目一つずつに絞る方法

お世話になります。

アクセスで各商品コードごとに、「各施設の価格一覧」
集計をとるための下準備(各コード、重複なく一つずつに
絞られたテーブルを作りたいです)として、
エクセルシート内で無秩序に複数ある各商品コードから、
それぞれ一つずつだけ列挙されたシートを作りたいです。

1万行を超えているので、「集計」でまとめても
意味がないだろうし、この場合の対応策について
皆目思い浮かばないのですが、
よろしければアドバイスいただけないでしょうか。

よろしくお願い致します。

Aベストアンサー

こんばんは。

Accessを使うのも結構なのですが、Excelでは、フィルタオプションを使います。

メニューから
[データ]-[フィルタ]-[フィルタオプションの設定]

 指定した範囲(O)
 リスト範囲(L) に範囲を入力
 抽出範囲は、適当に1つのセルを選択し、

 □重複するレコードは無視する(R)にチェック

 OK

で、ユニーク・データが取れます。

これは、ユニーク・データを取るためのExcelのデータベース機能です。

Qエクセルで、列内が同じ名前を集計する方法は?

エクセルで以下のような表を作成したとします。

      A列   B    C    D
 1行   名前   項目   金額
 2    すずき  あいう  100
 3    すずき  かきく  200
 4    すずき  さしす  450
 5    さとう  あいう  150
 6    さとう  さしす  200
 7    はやし  あいう  250 
 8    はやし  かきく  170
 9    はやし  たちつ  980

B列の名前が同じ者の、金額の合計をD列に出したいのです。
D4に すずきの合計 750、D6にさとうの合計 350、
D9にはやしの合計 1150  というふうに。
全部で100人分位、データ行数は15000ほどあるのですが
これをさっとできるようにはどのようにしたら良いのでしょうか?

Aベストアンサー

次の方法は如何でしょうか。
D2に=IF(COUNTIF(A:A,A2)=COUNTIF($A$2:A2,A2),SUMIF(A:A,A2,C:C),"")を入力→D2を選択→フィルハンドル(D2セル枠右下の■)をダブルクリック
但し、C列途中に空白がある場合、その直前までしかコピーされませんので、空白セル前のセルを下方向にコピー後、同様にフィルハンドルをダブルクリックし下さい。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセル 同じ値を探して隣の数値をコピーする

エクセルで以下の作業を簡単にする方法を教えて下さい。

Sheet1の1行目には見出しがあり、A列とB列の2行目から下にデータが入っています。(約200行)
A列     B列
田中    13
山本     8
谷口    11
鈴木    6
佐々木    9
奥村     15




Sheet2のA列1行目から下には別のデータが入っています。(約600行)
A列
太田川
山村
田中
多賀先
鈴木
奥村
幸田




Sheet2のA列のデータと完全一致するデータ(名前)をSheet1のA列から探して、同じ名前があれば、その隣のB列にある数値をSheet2のB列に貼り付ける。
見つからない場合はSheet2のB列は空欄のままです。
Sheet2
A列      B列
太田川     
山村
田中    13
多賀先
鈴木     6
奥村    15
幸田


Aベストアンサー

シート2のB2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF(Sheet1!A:A,A2)=0,"",VLOOKUP(A2,Sheet1!A:B,2,FALSE))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング