• ベストアンサー

エクセル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

noname#232634
noname#232634

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

エクセルは表計算ソフトです。見た目よりも機能がよく働くように維持することが必要でしょう。その点でセルの結合はそのあとの計算処理を複雑にします。できればセルの結合はしないことですね。 どうしてもということであれば次のようなマクロはどうでしょう。 結合のときに注意が表示されますが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

noname#232634
質問者

お礼

早々に回答いただきありがとうございます。 おっしゃるように、マクロを実行すると、「選択範囲には複数のデータがあります。1つのセルとして結合すると・・・」と警告画面が表示され、「OK」ボタンを押すことによりセルは結合され、思ったような表示になります。しかし、シート中にセルの結合されるべき部分が数百個所あるため、その数と同じ回数だけ警告画面があらわれます。 ただ単にデータが入ったセル複数を選んで「セルを選んで中央揃え」ボタンを押しても同様の警告が出るので、当然といえば当然なのでしょうが・・。やはり、私のやろうとしていることには無理があるのでしょうか?

その他の回答 (3)

  • takana_
  • ベストアンサー率44% (21/47)
回答No.4

#3です 仮にセルE2でも =CONCATENATE($A1,$B1,$C1) と入力してみてください なんとなく関数の意味はわかると思います。 条件式の意味は =CONCATENATE($A1,$B1,$C1) と =CONCATENATE($A2,$B2,$C2) の 返す答えが等しければ(Trueであれば)、設定した書式を適用しろということです。 仮に適当なセルに、=1=1 分かりやすく書けば=(1=1)と入力すればTRUEとなるはずです。1と1は等しいということです。

noname#232634
質問者

お礼

いろいろありがとうございます。 これから色々勉強していきたいと思います。

  • takana_
  • ベストアンサー率44% (21/47)
回答No.3

望まれているやり方とは少し違いますが、 このような方法はどうでしょうか? A2セルを選択して 条件付き書式を選択して 「ルールの種類」で、「数式を使用して書式設定する」を選択 「ルールの内容に」以下の数式を記述 =CONCATENATE($A1,$B1,$C1)=CONCATENATE($A2,$B2,$C2) 「書式の選択」で「フォントの色」に白色を選択 A2セルをコピーして、A2:C6セルに「形式を選択して貼り付け」 において「書式」を貼り付ける。 以上で、見た目はフォントが白色なので見えなくなります。

noname#232634
質問者

お礼

ありがとうございます。 こんな方法もあったのですね!勉強になります。 これだとセルの結合をしなくても済むんですね。 ただこれは何を意味するんでしょうか?     > =CONCATENATE($A1,$B1,$C1)=CONCATENATE($A2,$B2,$C2)

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.2

>その数と同じ回数だけ警告画面があらわれます #1さんのソースを流用して、以下のように Application.DisplayAlerts = False を付け加えれば、警告メッセージが出ません。 #1さんが言われるように、私もセルの結合は推奨しませんが。。 Sub セルの結合() Dim i As Integer Dim n As Integer Application.ScreenUpdating = False Application.DisplayAlerts = 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

noname#232634
質問者

お礼

ありがとうございました。 おかげさまで、警告画面がスキップされ、思うような結果が得られました。 私の場合、仕事上、97列、約600行のcsvファイルをダウンロードして、そこから不要な列を削除、社員に視覚的にわかりやすくして配布する必要があったので、重複内容のセル結合にこだわったのです。後々、表計算に利用する必要も無かったものですから。 このたびは本当にお世話になり、ありがとうございました。

関連するQ&A

  • エクセル 文字にリンクを入れる方法

    エクセルでの質問です。 たとえばA:1に 山田商店 A:2に田中商店と入力 次にB:1に山田商店のURLを入力 B:2に田中商店のURLを入力 これをC:1には 山田商店という文字にB:1で入力したURLを リンクさせるやり方はあるでしょうか? 私の稚拙な文章だと質問がわかりにくいかも知れませんが、 ようは、A列に商店名 B列にその商店のURL C列に商店名にURLの リンクを張ったものを入れたいのです。 ご存知の方がいましたら、よろしくお願いいたしますm(__)m

  • Excel 重複

     A列   B列    C列       D列 12345-6  ABC  あいう商事  ・・・ 12345-6  ABC  あいう商事  ・・・ 56489-4  DEF  あいう商事  ・・・ 56489-4  DEF  あいう商事  ・・・ 56489-4  DEF  あいう商事  ・・・ 32159-4  JHI  かきく商事  ・・・ 32159-4  JHI  かきく商事  ・・・          ↓   A列   B列    C列       D列 12345-6  ABC  あいう商事  ・・・ 56489-4  DEF  あいう商事  ・・・ 32159-4  JHI  かきく商事  ・・・

  • セルの一部のフォントの置き換え可能ですか?エクセル2000

    A列に店名がならんでいます。 1鈴木商店 2山田商店 3田中呉服店 4山口飲食店   ・   ・   ・ たとえば、 これの一文字の「店」のフォントだけを他のフォントに 一括で置き換えできませんか? よろしくお願いします。

  • ExcelでA列内で重複するレコードを削除

    A、B、C列にデータが入力されており、A列の店名が重複する場合、最初の1つを残して、他の重複するレコード(行全体)を削除する方法を教えてください。 A列で重複していても、B、C列で内容が違う可能性があります。 例えば、 A列:田中商店 B列:本町1-1-1 C列:0120-000-000 A列:田中商店 B列:本町1-1-11 C列:0120-000-001 この様にA列で田中商店が重複する場合、1番目の田中商店の行だけを残し、2番目以降は行全体を削除して上方向に詰めたいです。

  • エクセルのセルの結合について

    数式や関数を使わずに、2つのセルの文字列を結合 する方法はあるのですか? -----------例----------- A1のセルの文字列 山田 B1のセルの文字列 太郎 C1に山田太郎と表示させる ------------------------ 知り合いが何かの本で見たと言っています。 もしかしたら見間違いでしょうか? 非常に気になってモヤモヤしています。 返答宜しくお願いします。

  • エクセル:異なるセルの文字の結合

    例えばA列に「性」B列に「名」とか、A列に「市町村名」B列に番地(3-2-3など)とあった場合、一つのセルに2つのセル内の文字をまとめることは出来ますか? 例:A1「山田」B1「太郎」→C1「山田太郎」 確か出来たはずなのですがどうやったら良いのか忘れてしまいました^^;

  • ハイパーリンク情報を別セルへコピー

    ************************************************************* <例>・・・A列にはハイパーリンクされているセルとされていないセルが混在です  A列(社名)  B列(郵便番号)  C列(住所)  D列(電話番号)  (株)ABC商事   100-1234       東京都港区… 03-1234-5678  XYZ運送(有)   200-6789       東京都港区… 03-8765-4321  (株)あいう物産   100-1234       東京都港区… 03-9999-0001               ↓VBA実行↓  A列(社名)  B列(郵便番号)  C列(住所)  D列(電話番号)    E列  (株)ABC商事   100-1234       東京都港区… 03-1234-5678    http://www.abc.co.jp  XYZ運送(有)   200-6789       東京都港区… 03-8765-4321      (株)あいう物産   100-1234       東京都港区… 03-9999-0001   http://www.aiu.ne.jp ************************************************************* 上記のようなデータがExcel上に有ります。 A列にはハイパーリンクされているセルとされていないセルが混在していますが、この、情報を別の列に一括でコピー出来ないでしょうか? 現在は、1つずつ、A列のURLをE列にコピペしています。 非常に手間が掛かり困っています。 よろしくお願い致します。

  • エクセルで連続したセルの行番号を取得するには?

    教えてください。 a列に販売店(複数あり)名が入っています。 何行目まで入っているかは不定です。 例えば今日はa2からa100までがa商店、a101からa150までがb商店、a151からa200までがc商店、 明日はa2からa50までがa商店、a51からa130までがb商店、a131からa300までがc商店という具合です。 そこで、a商店は何行目から何行目までか、b商店、c商店は??というのを取得する関数を知りたいです。 excell2003です。 どうぞよろしくお願いします。

  • エクセルのデータ並べ替え(抽出)の方法

    エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

  • エクセルのマクロでセルに入力されているセル番地に貼り付け?

    エクセルのマクロで質問です。 下記のように入力されています   A    B    C    D 1 あ   田中  2000  N3   2 い   中嶋  1500  Q3 3 う   吉田  1600  U3 4 え   石川  1800  N11 5 お   横山  1500  Q11 6 か   鈴木  1600  U11 7 き   中村  2500  N19 8 く   山田  1200  Q19 9 け   橋本  1400  U19 ・・・・(500行くらいあります) この表のA1:C1をN3に行列を入換えて貼り付け、 A2:C2をQ3に行列を入換えて貼り付け・・・ のように、ABC列の内容を、D列に入力されているセル番地に貼り付けたいのです。 INDIRECT関数など使ってみましたが、どうにも出来そうにありません。 これをなんとかマクロで出来ないものでしょうか。 困ってます。お願いします。

専門家に質問してみよう