アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の作業をマクロで処理したいと思っています。

エクセルのシート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列と表示させていきたいと思っています。

贅沢な希望かもしれませんが処理が早いほうがいいです。

マクロについては、まったくの初心者で何がなんだかわかりません。

じっくり勉強すればできることなのかもしれませんが、ちょっと急いでいます。

どうぞよろしくお願いいたします。

エクセルでは無理とか、テキストエディターの方が便利だ、
または、有料でも便利なソフトなどのアドバイス等ありましたらお願いいたします。

A 回答 (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

この回答への補足

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

補足日時:2007/10/25 21:07
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/17 15:55

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