• 締切済み

エクセルで複数の文字列の結合方法

以下の作業をマクロで処理したいと思っています。 エクセルのシート1に   A   B   C 1 aaa アアア あああ 2 bbb イイイ いいい 3 ccc ウウウ ううう 4 ddd エエエ えええ 5 eee オオオ おおお という表があったとします。 これらの文字列の横の組合せ(125通)の全てを シート2のA列に表示させたいのです。 この表は5の3条の組合せなのですが、 実際には列も行数も多くて、列ごとに行数もバラバラです。 組合せの数が、65536行を超えるときにはシート2のB列に、 それも超えるならC、D、E列と表示させていきたいと思っています。 贅沢な希望かもしれませんが処理が早いほうがいいです。 マクロについては、まったくの初心者で何がなんだかわかりません。 じっくり勉強すればできることなのかもしれませんが、ちょっと急いでいます。 どうぞよろしくお願いいたします。 エクセルでは無理とか、テキストエディターの方が便利だ、 または、有料でも便利なソフトなどのアドバイス等ありましたらお願いいたします。

みんなの回答

  • normo
  • ベストアンサー率54% (6/11)
回答No.1

レスがつかないようなので。 MicrosoftAccessはお持ちでないですか?エクセルでやるよりずいぶん簡単に出来ますよ。 あまりお勧めではありませんがエクセルのマクロでも処理可能です。 しっかり動作確認していないので不具合があったら申し訳ありません。 以下をモジュールにコピーし「Main」を実行してください。 ただしシートの並びは左からシート1、シート2としておく事。 Dim shtIn As Worksheet Dim shtOut As Worksheet Dim lngRowIn() As Long Dim lngRowInCnt() As Long Dim lngColIn As Long Dim lngColInCnt As Long Dim lngRowOut As Long Dim lngColOut As Long Public Sub Main() Application.ScreenUpdating = False Set shtIn = ThisWorkbook.Worksheets(1) Set shtOut = ThisWorkbook.Worksheets(2) lngColInCnt = shtIn.Cells(1, 1).End(xlToRight).Column ReDim lngRowIn(1 To lngColInCnt) ReDim lngRowInCnt(1 To lngColInCnt) For lngColIn = 1 To lngColInCnt lngRowInCnt(lngColIn) = shtIn.Cells(65536, lngColIn).End(xlUp).Row Next lngRowOut = 65536: lngColOut = 0 subSetRowIn 1 Application.ScreenUpdating = True End Sub Private Sub subSetRowIn(lngCol As Long) Dim strOut As String For lngRowIn(lngCol) = 1 To lngRowInCnt(lngCol) If lngCol < lngColInCnt Then subSetRowIn lngCol + 1 Else If lngRowOut < 65536 Then lngRowOut = lngRowOut + 1 Else lngRowOut = 1 lngColOut = lngColOut + 1 End If strOut = "" For lngColIn = 1 To lngColInCnt strOut = strOut & shtIn.Cells(lngRowIn(lngColIn), lngColIn) Next shtOut.Cells(lngRowOut, lngColOut) = strOut End If Next End Sub

simachu
質問者

お礼

データの量を調整すれば上手くいきました。ありがとうございました。

simachu
質問者

補足

レス、ありがとうございます。残念ながらMicrosoftAccessは持っていません。上記のマクロを早速試してみます。

関連するQ&A