プロが教えるわが家の防犯対策術!

かなりの行があるテキストファイルをEXCELに読み込みます。
3行が1組になっているので、別のBというシートにその3行を連結した結果を書き出します。
(3行といっても1行には1セルしかありませんが・・・)
次に4行目~6行目が1組になっているので、上記と同様にBシートの2行目に連結した結果を書き出します。
これは、手で1行づつBシートに
=A1&A2&A3 、次の行に =A4&A5&A6

等と式を記載すれば希望のものが出来るのですが、場合によっては元の行が30,000行ほどあったりするので、それを全て手で入力していくには、根気と時間が必要になります。
この作業は、毎日発生する予定で、他の仕事もやらなくてはならないため、短時間にこれを実現できれば・・・と、思っていますが、何をどうすれば良いのかわからずにいます。

これを解決できる方法がありましたら、是非教えて頂けると助かります。
ちなみにEXCEL XP(OfficeXPに付属)のものです。
例えば、EXCELではなく、***というフリーのソフトならできます!というのも歓迎です。
すみませんが、宜しくお願いします。

A 回答 (13件中1~10件)

1)テキストを読み込んだシートを仮に[Sheet1]とします。

適宜読み替えてください。
2)シートを追加します。このシートを仮に[Sheet2]とします。
3)sheet2のセルa1に、以下をコピペしてください。
式[=indirect("Sheet1!A"&(row()-1)*3+1)&indirect("Sheet1!A"&(row()-1)*3+2)&indirect("Sheet1!A"&(row()-1)*3+3)]
4)シート2のセルA1の右下(セルA2左下・セルB1の右上・セルB2の左上)に■があるので、マウスで下方向に必要なだけドラッグ。

これでSheet1の列Aが3行単位で連結されてSheet2のセルA1以降に表示されます。

以下必要に応じて。
5)Sheet2の列Aをコピー
6)どこかに、「形式を選択して貼り付け」-「値」で式の結果が値として保存されます。
    • good
    • 0
この回答へのお礼

早速教えて頂き、ありがとうございます。
自宅のEXCELはVerが異なるのですが、それでも問題なく希望通りのものができました。
休み明けに会社のPCで試してみます。
本当にありがとうございました!!

お礼日時:2011/03/19 21:57

参考ページはたくさんありますが



すぐ役立つ エクセルVBAマクロ集
http://www.asahi-net.or.jp/~zn3y-ngi/

こちらで使い方などを調べて(VBAマクロというのはオフィスに標準でパッケージされてるのですぐ使えます)

以下のページを参考にマクロを作ればいいのではないでしょうか?
Macro コピー
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv20009.h …
異なるシート間で範囲指定してコピーして貼り付けるには?
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv991.html

7.2 データがある最終行を知る方法
http://www.happy2-island.com/excelsmile/smile03/ …

文字列の結合
http://www.officepro.jp/excelvba/basic/index7.html

このあたりを参考にして

1:元シート(仮にAとして)の文字列を3行分結合する
2:Bシートに1の結果を書き込む
3:Aシートのデータ行が終わるまで、1~2の動作を繰り返す

こんな感じのものを作れば、ボタン一つで質問主様の意図する動作を行わせることができると思います。
    • good
    • 0
この回答へのお礼

早速お教え頂きありがとうございます!
今後も色々と使えそうなサイトをご紹介いただき、ありがとうございます。
これらを参考に、試してみます。
本当にありがとうございました!

お礼日時:2011/03/19 11:55

もうひとつの方法



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行連結部のみが残ります。
    • good
    • 0
この回答へのお礼

早速、お教え頂き、ありがとうございます。
自宅のPCで試したところ、希望通りのものが出来上がりました。
休み明けにでも会社のPCで同様に試してみます!
本当にありがとうございました!!

お礼日時:2011/03/19 11:52

こんな感じかな?


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
きたない式ですみません。
    • good
    • 0
この回答へのお礼

早速お教え頂き、ありがとうございます!

自宅のPCで試したところ、マクロが実行できず、うまくいきませんでした。
ひょっとしたら、EXCELのVerが違うかもしれません。。
休み明けに会社のPCで試してみますが、取り急ぎ、御礼まで。

ありがとうございました!

お礼日時:2011/03/19 11:39

こんばんは!


一例です。
画面左下にある操作したい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
    • good
    • 1
この回答へのお礼

自宅のEXCELのVerが違うためか、マクロを実行できるようにするために少し手間取りましたが、希望通りのものが実行できました!
とっても感激です。
本当にありがとうございました!!

お礼日時:2011/03/19 11:23

=INDEX(Sheet1!A:A,ROW(A1)*3-2)&INDEX(Sheet1!A:A,ROW(A1)*3-2+1)&IN

DEX(Sheet1!A:A,ROW(A1)*3-2+2)
    • good
    • 0

[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)
    • good
    • 0

>この作業は、毎日発生する予定で



ということなので。

BのシートのA1に
=Sheet1!A1&Sheet1!A2&Sheet1!A3
を記入
A1:A3を選んだ状態から,リストの下端までえいやーーーっとオートフィルドラッグ

この状態から,さらに
A列を列選択
Ctrl+Gをおす
現れたダイアログでセル選択をクリックする
現れたダイアログで空白セルにマークしてOKする
空白のままだった2セルずつが飛び飛びに選択されるので,右クリックして削除で上に詰める

以上で所定の式を希望の並びに詰めて配置できたので,毎日のデータはシート1に上書きで貼り付けてしまえば,数式のシートが即座にコタエを並べて出してくれます。
(形式を選んで値に貼り替える必要はまったくありません)
    • good
    • 1
この回答へのお礼

早速ご回答いただき、ありがとうございました。
あらから自宅に帰り、何度か試してみましたが、うまくいきませんでした。
きっと、会社と自宅のVerが違うかもしれません。
休み明けに会社で再度試してみたいと思います。
本当にありがとうございます。
取り急ぎ、お礼まで。

お礼日時:2011/03/19 09:01

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で3行を一組にして結合する方法」の回答画像9
    • good
    • 0
この回答へのお礼

早速お教え頂き、ありがとうございます。

試してみたのですが、会社のEXCELのVerと違うせいか、10行目あたりで”実行時エラー 1004”というダイアログが表示されてしまい、先に進めませんでした。
休み明けに会社のPCで試してみます!
取り急ぎ、御礼まで。

ありがとうございました!

お礼日時:2011/03/19 11:34

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)
・・・・
だと思います
    • good
    • 0

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