- ベストアンサー
EXCELで3行を一組にして結合する方法とは?
- EXCELで大量の行を取り込む際に、3行ごとに結合する方法を知りたいです。行数が多い場合、手動での入力は時間がかかるため、効率的な方法を求めています。
- EXCEL XP(OfficeXPに付属)を使用していますが、他のソフトでも構いません。30,000行のような大量のデータをすばやく処理する方法を教えてください。
- 数千行のテキストを3行のセットに結合する方法を探しています。EXCELやフリーソフトなど、任意の方法で対応できるソリューションを教えてください。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 一例です。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストし、マクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sheet1のデータは1行目からあるとします。 Sub test() 'この行から Dim i As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←Sheet名(Sheet1の部分)は適宜変更してください。 Set ws2 = Worksheets("sheet2") '←こちらのSheet名も適宜変更 For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row Step 3 ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = _ ws1.Cells(i, 1) & ws1.Cells(i + 1, 1) & ws1.Cells(i + 2, 1) Next i End Sub 'この行まで お役に立てば良いのですが・・・m(__)m
その他の回答 (12)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1、#3です。 他の方の回答に「下方向にコピーするのが大変」的な部分がありますが、何万行あっても、スクロールさせる必要はありません。対応方法はあります。 そのために#3では連番を設け、選択セル範囲の右下■(フィルハンドル)をダブルクリックするのです。 (空白行削除のための並べ替え後に、値がある列Aを元の順序に戻すためでもありますが) コピー後、下の端を確認するためには「選択セル範囲の下辺」をダブルクリックしてください。 連続した領域の最終行までジャンプします、 各辺とも同じ動作で、選択した方向の端に移動します。 途中、途切れていることが明らかなら、Ctrl+下矢印キーか、Ctrl+Endキー押下です。 セルA1に戻るにはCtrl+Homeキー。 さらにShiftキーも合わせて押さえておけば範囲範囲選択が可能です。
お礼
これまでわざわざ下までスクロールして連番付けやコピーをしていました。 とってもいいことを教えていただき、有難うございました!
- mar00
- ベストアンサー率36% (158/430)
新規のブックで ツール→マクロ→Visual Basic Editerを選択 挿入→標準モジュールを選択 そこにマクロをコピーして貼り付けて下さい ツール→ユーザー設定→コマンドタブの分類マクロ→ユーザー設定ボタンを出す 選択したボタンの編集でボタンの表示のしかたを変更できます。 選択したボタンの編集→マクロを登録→Macro1を選択してOK 名前をつけて保存してください、 Sub Macro1() Dim WS1 As Worksheet Dim GYOU As Long Set WS1 = Worksheets("Sheet1") Sheets.Add NN = WS1.Cells(Rows.Count, 1).End(xlUp).Row GYOU = 0 For i = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row Step 3 GYOU = GYOU + 1 Range("A" & GYOU) = WS1.Range("A" & i) & WS1.Range("A" & i + 1) & WS1.Range("A" & i + 2) Next i Windows(ThisWorkbook.Name).Close False End Sub "Sheet1"のところは適宜修正してください。前日のテキストデータを残しておく必要がある場合は 名前を変更して保存しておいて、テキストデータを毎回同じ名前で保存しておけば1度の修正で済むと思います。 テキストファイルをEXCELに読み込み、ボタンをクリックすればマクロが実行されます。
お礼
自宅のPCでやってみましたが、EXCELのVerが違うせいか、うまくVisual Basic Editerを起動することができませんでした。 休み明けに会社のPCで試してみますが、取り急ぎ御礼まで。 早速お教え頂き、ありがとうございました。
- neochi_life
- ベストアンサー率43% (115/263)
5番さんへ なんども;; ちょっと見間違いをしてまして、いらないこと書き失礼しました step 3 ですものね。セル指定合ってますよね・・・
- neochi_life
- ベストアンサー率43% (115/263)
5番さんへ 記述内容はほぼ一緒ですが記述中、ループ内で元データを3個ごとに結合する部分で誤りがあります 参考としてこんな感じ~で書かれたのだと思いますが一応。 ws1.Cells(i, 1) & ws1.Cells(i + 1, 1) & ws1.Cells(i + 2, 1) ですが、一回目の読み込みでは ws1.Cells(1, 1) & ws1.Cells(2, 1) & ws1.Cells(3, 1) となり正常にセルの内容を結合しますが ではi=2以降は? ws1.Cells(2, 1) & ws1.Cells(3, 1) & ws1.Cells(4, 1) ws1.Cells(3, 1) & ws1.Cells(4, 1) & ws1.Cells(5, 1) ws1.Cells(4, 1) & ws1.Cells(5, 1) & ws1.Cells(6, 1) ・・・・ となり重複して元データの内容を書き出してしまいます 質問主の意図する結合は ws1.Cells(1, 1) & ws1.Cells(2, 1) & ws1.Cells(3, 1) ws1.Cells(4, 1) & ws1.Cells(5, 1) & ws1.Cells(6, 1) ws1.Cells(7, 1) & ws1.Cells(8, 1) & ws1.Cells(9, 1) ・・・・ だと思います
- neochi_life
- ベストアンサー率43% (115/263)
2です。 マクロを使用する場合には、「ツール>マクロ>セキュリティー」から、セキュリティーレベルを中に設定 自分でテストデータ作って動くことを確認したものを参考に張っておきます 一応、これで「自作のフリーソフト」ができます 以下手順 ・新しいファイルを作ります(作業用です) ・Alt+11でビジュアルベーシックエディターを開き、Module1を追加する ・以下をまるごと貼り付ける ' ---------- 内容始まり ---------- Private Sub 作業() Dim 合成 As Variant Dim i, j, l As Integer Dim 最終行 As Integer 合成 = "" j = 1 l = 2 m = 0 Sheets("sheet2").Select 'コピー元のシートに切替 最終行 = Cells(1, 1).End(xlDown).Row For i = 3 To 最終行 Step 3 合成 = Cells(j, 1) + Cells(l, 1) + Cells(i, 1) j = j + 3 l = l + 3 Sheets("sheet1").Select 'コピー先のシートに切替 m = i / 3 Cells(m, 1) = 合成 Sheets("sheet2").Select 'コピー元のシートに切替 Next Sheets("sheet1").Select 'コピー先のシートに切替 End Sub ' ---------- 内容終わり ---------- ・Ctrl+S で保存する ・次に、Module1のちょっと上にあるThis Workbookをダブルクリックして以下の記述を丸ごと貼り付ける ' ---------- 内容始まり ---------- Private Sub Workbook_Open() Application.OnKey "^{q}", "作業" 'Ctrl+Qボタンを押すとマクロが動きます End Sub ' ---------- 内容終わり ---------- ・Ctrl+S で保存する ・一度閉じてからもう一度開く(確認ダイアログが出るので、「マクロを有効にする」を選ぶ) ここまでで準備ができました 使い方 ・元になるシートをsheet2として、元になるシートを丸ごとコピペしておきます ・出力先になるシートをsheet1として、シート内容をクリアしておきます ・Ctrl+Qを押すと、シート2の内容を3行ずつを1行につなげて、シート1に書き出します ・元データが「3行1セットである前提」で、何行あっても最終行まで書き出します ・3行1セットが崩れてたらエラーが起きます ・シート1に書き出されたデータを、保存するファイルに丸ごとコピペします -------------------------------- 他の方が言われてるように、関数式をどこかに保存しておいて、使う時に貼り付けて必要な行だけドラッグしつつコピーでもいいですが、元データが3万行とかもしかするとそれ以上あるんですよね?ということは、自分でドラッグするのは1万行以上あるわけです。 それもけっこう大変だろうなのでは?と思い、マクロを作ってみました
お礼
早速お教え頂き、ありがとうございます。 試してみたのですが、会社のEXCELのVerと違うせいか、10行目あたりで”実行時エラー 1004”というダイアログが表示されてしまい、先に進めませんでした。 休み明けに会社のPCで試してみます! 取り急ぎ、御礼まで。 ありがとうございました!
- keithin
- ベストアンサー率66% (5278/7941)
>この作業は、毎日発生する予定で ということなので。 BのシートのA1に =Sheet1!A1&Sheet1!A2&Sheet1!A3 を記入 A1:A3を選んだ状態から,リストの下端までえいやーーーっとオートフィルドラッグ この状態から,さらに A列を列選択 Ctrl+Gをおす 現れたダイアログでセル選択をクリックする 現れたダイアログで空白セルにマークしてOKする 空白のままだった2セルずつが飛び飛びに選択されるので,右クリックして削除で上に詰める 以上で所定の式を希望の並びに詰めて配置できたので,毎日のデータはシート1に上書きで貼り付けてしまえば,数式のシートが即座にコタエを並べて出してくれます。 (形式を選んで値に貼り替える必要はまったくありません)
お礼
早速ご回答いただき、ありがとうございました。 あらから自宅に帰り、何度か試してみましたが、うまくいきませんでした。 きっと、会社と自宅のVerが違うかもしれません。 休み明けに会社で再度試してみたいと思います。 本当にありがとうございます。 取り急ぎ、お礼まで。
[No.6]の式は、次式と同じことですが、こちらの方が少し短いです。 =INDEX(Sheet1!A:A,ROW(A1)*3-2)&INDEX(Sheet1!A:A,ROW(A1)*3-1)&INDEX(Sheet1!A:A,ROW(A1)*3)
=INDEX(Sheet1!A:A,ROW(A1)*3-2)&INDEX(Sheet1!A:A,ROW(A1)*3-2+1)&INDEX(Sheet1!A:A,ROW(A1)*3-2+2)
- aoumiushi
- ベストアンサー率45% (234/512)
こんな感じかな? VBA使用します。 但しA列の表示形式が、文字列の場合のみです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim a, b As Integer Dim c As String a = 0 '初期化 b = 0 '初期化 c = "" '初期化 For i = 1 To 25 'MAXの行数に変更 c = c + Cells(i, 1).Value a = a + 1 If a = 3 Then b = b + 1 Cells(b, 2).Value = c c = "" a = 0 End If Next End Sub きたない式ですみません。
お礼
早速お教え頂き、ありがとうございます! 自宅のPCで試したところ、マクロが実行できず、うまくいきませんでした。 ひょっとしたら、EXCELのVerが違うかもしれません。。 休み明けに会社のPCで試してみますが、取り急ぎ、御礼まで。 ありがとうございました!
- bin-chan
- ベストアンサー率33% (1403/4213)
もうひとつの方法 1)読み込んだシートを仮に[Sheet1]とします。 2)セルB1に値[1]を入力、セルB2に値[2]を入力。 3)セルB1:セルB2を選択し、選択領域右下の■をダブルクリック(これで全行に行番号が振られます) 4)セルC1に式[=A1&A2&A3]を入力。 5)セルC1:セルC3を選択し、選択領域右下の■をダブルクリック(これで3行単位に式がコピーされます) 3行単位で、1行目にデータ、2行目・3行目が空白が繰り返しになります。 6)列B:列Cを選択してコピー。 7)どこか別シートで、形式を選択して貼り付け-値 8)列B(元の列Cである3行連結部分)から列A(元の列Aである連番)を選択。 9)メニューorリボンのデータ>並べ替えを実行(キーは列B) これで列Bの値がある行がひとかたまりになります。 10)列Aで、列Bに値がない部分の「行全体」を削除。 11)メニューorリボンのデータ>並べ替えを実行(キーは列A) これで3行連結部のみが残ります。
お礼
早速、お教え頂き、ありがとうございます。 自宅のPCで試したところ、希望通りのものが出来上がりました。 休み明けにでも会社のPCで同様に試してみます! 本当にありがとうございました!!
- 1
- 2
お礼
自宅のEXCELのVerが違うためか、マクロを実行できるようにするために少し手間取りましたが、希望通りのものが実行できました! とっても感激です。 本当にありがとうございました!!