• ベストアンサー

エクセルの3行分を1行として認識させるやりかた

エクセル2010を使用しています。 エクセルの3行分を1行として認識させるやり方ありますでしょうか? (例) A1、A2、A3に入力された言葉を1行として認識させるやり方がありますでしょうか? また、認識ができたうえでのお話で、セルの位置が変わっても対応が出来ればと思っております。 ご存知の方、申し訳ありませんが、お教えいただけないでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.6

このサンプルコードでは、下から上へ3行づつまとめて処理しています。 変数iは行ですが、3行セットの一番下の行をさします。 i-2は3行セットの一番下の行から2つ上=3行セットの1番上の行になります。 残りはコード中にコメントを入れましたので参照ください。 こんな感じでわかりますでしょうか? Sub Sample2()   For j = 1 to 5 '対象は1列目から5列目(A~E列)     '対象列の一番下の行から3行づつ上へと処理     For i = Cells(Rows.Count, j).End(xlUp).Row To 4 Step -3       sString = Cells(i - 2, j) & vbLf & Cells(i - 1, j) & vbLf & Cells(i, j) '3行を結合した文字列を作成       Cells(i - 2, j) = sString '作った文字列を先頭行に代入       Range(Cells(i - 1, j), Cells(i, j)).Delete Shift:=xlUp '不要な2行を削除     Next i   Next j End Sub

noname#227795
質問者

お礼

大変わかりやすいご説明をありがとうございます。 やりたいことが出来るようになりました。 本当にありがとうございます。 また、行き詰ったりしたものがありましたら、ご相談させて下さい。 今後とも宜しくお願い致します。

その他の回答 (5)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

> これを「B列」「C列」「D列」「E列」・・・ > もしようと思えば、マクロのどの部分に追加すればできるようになるのでしょうか? Cellsより、Rangeプロパティを使った方が解りやすかったでしょうか(個人的には行も列も数値で表すCellsプロパティの方が使いやすいです)。 Cellsプロパティの場合、Cells(行,列)で表します。 A列からE列までならこんな感じで行けるでしょう。 Sub Sample2()   For j = 1 to 5     For i = Cells(Rows.Count, j).End(xlUp).Row To 4 Step -3       sString = Cells(i - 2, j) & vbLf & Cells(i - 1, j) & vbLf & Cells(i, j)       Cells(i - 2, j) = sString       Range(Cells(i - 1, j), Cells(i, j)).Delete Shift:=xlUp     Next i   Next j End Sub

noname#227795
質問者

補足

大変、返事が遅くなりまして申し訳ありません。 やりたいことが出来ました。 ただ、今回であればA列からE列でできるようにお教えいただいたのですが、 「Cellsプロパティの場合、Cells(行,列)で表します。」 という事ですので、「Cells(行,列)」の部分を変えてあげれば、増やすことができるとの認識でお間違いなかったでしょうか? 実際に入れるとすれば、すべての「Cells(行,列)」の部分を変えてあげるのみで大丈夫なのでしょうか? また、「Cells(i - 2, j)」の「-2」は何をあらわした数字なのでしょうか? これもはせてお教えいただけたらと思います。 何度もご迷惑をおかけいたしまして申し訳ございません。 宜しくお願い致します。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

A2セルから始まって3行分のデータを1セルにセル内改行して入れたいって事なんでしょうかね。 で、あればマクロを使います。 標準モジュールに以下のコードを入れて実行してみてください。 Sub Sample()   For i = Cells(Rows.Count, 1).End(xlUp).Row To 4 Step -3     sString = Cells(i - 2, 1) & vbLf & Cells(i - 1, 1) & vbLf & Cells(i, 1)     Cells(i - 2, 1) = sString     Range(Cells(i - 1, 1), Cells(i, 1)).Delete Shift:=xlUp   Next i End Sub

noname#227795
質問者

補足

すごいです!!(゜ロ゜屮)屮 これを「B列」「C列」「D列」「E列」・・・ もしようと思えば、マクロのどの部分に追加すればできるようになるのでしょうか? 何度もお手数をおかけいたしまして申し訳ありません。

  • sora1515
  • ベストアンサー率58% (54/92)
回答No.3

=A1&A2&A3 かなとも思いましたがいや騙されてはいけないここは技術者向けカテだと気付き あえてc言語で読み込み構造体に入れる方法をご提案します。 http://www.din.or.jp/~wayou/confidential/mfc_excelread.html ps もし関数絡みでしたらデジタルライフ→ソフトウェア→エクセル のカテゴリもお見知りおきをどうぞ。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

「認識」?良く解りませんが、やりたいのはこういう事ですか? 結合しているC2セルの書式設定ダイアログを開き、「配置」タブ内の「折り返して全体を表示する」にチェックを付けておく。 次に、C2セルに↓ =A2&CHAR(10)&A3&CHAR(10)&A4

noname#227795
質問者

補足

ご回答ありがとうございます。 一度数式を入力させて頂きました。 3行の文字入力セルが1行の文字入力にまとめることが出来ました。 これをフィルターでなく並べ替えなどが使えるようにすることができるのでしょうか? 普通で並べ替えをしようとすると「この操作には、同じサイズの結合セルが必要です。」と出てしまいました。 並び替えをしたいのであれば、セル結合なしでの表を作成をしなければならないのでしょうか? 全く知識がないので、よくわからないことを言っているかもしれませんが、教えていただけたらと思います。 宜しくお願い致します。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>エクセルの3行分を1行として認識させるやり方ありますでしょうか? 「1行として認識させる」とはどういう意味ですか?? A1 A2 A3 に入力された文字列を連結して別のセルに入れたいという意味??

関連するQ&A