- 締切済み
Excel2003のマクロ設定
マクロの設定の仕方について質問します。 A1に123456…26 A2に123456…26 … A8002に123456…26 とかかれてなっています。 これをA1セルのものをA1に1、B1に2、C1に3…、X1に26 A2セルのものをA2に1、B2に2、C2に3…、X2に26 … A8002まで設定するにはどのようにしたらいのでしょうか。 何卒、よろしくお願い申し上げます。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
例示はわかりやすいことが多いですが、この例では、1つ2つの説明文章が添えられていないため、あいまいで判りにくくなっています。 A1は文字列ですね。数字では16桁以上は入らない。その文字列は英字記号を含まないのですか。多分含むのでしょう。それであれば 1243ABRD・・S(26桁)とか例示して、規則性のない文字数字列とかを、匂わせるようにするか、1言添えるべきです。 文字列を1桁ごとに分解するなら、A1をA1からははじめられないが、 B1から初めて、B1に=MID($A1,COLUMN()-1,1) と入れて、右方向にX(任意)列まで式を複写。 B1:X1を範囲指定し、X1で+ハンドルを出して、下方向へ引っ張ればよい。 引っ張るのも大変だったら1行コピーし、その下8001行に貼り付ければよい。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 他の回答された方は、「自信あり」ですが、私には、良く分らないご質問だなって思います。 >A1に123456…26 >A2に123456…26 同じものが入っていて、 >これをA1セルのものをA1に1、B1に2、C1に3…、X1に26 >A2セルのものをA2に1、B2に2、C2に3…、X2に26 それを切り分けるもなにもないと思います。 オートフィルで、1~26まで右にドラッグして、今度は、その範囲の行を、コピーしたら、8002 行まで、範囲を広げて、貼り付けすればよいのではないでしょうか? 関数で、切り分けるなら、こんな式にはなるけれども、B1からAA1ですから、出来上がったら、値コピーですね。 =MID($A1,MIN(COLUMN(A1),10)+MAX(COLUMN(A1)-10,0)*2,INT(LOG(COLUMN(A1)))+1) でも、X1に26 というのは、どういうことなのでしょうね。Z1なら分るけれども。 '--------------------------------------- それを、マクロを関数で、1~26 まで作ってしまうなら、以下のようにすればよいです。 Sub IncrimetRange() Application.ScreenUpdating = False Range("A1").Resize(8002).NumberFormat = "General" With Range("A1").Resize(, 26) .FormulaLocal = "=COLUMN(A1)" .Value = .Value .Copy .Resize(8002) End With Application.ScreenUpdating = True End Sub あえて切り分けマクロなら、こんな風になるのかな?不満は残るけれども。 Sub SplitNumbers() Dim rngValue As Variant Dim SepNumbers(1 To 26) As String Dim i As Long Dim j As Integer Dim k As Long Dim n As Variant k = 1 rngValue = Range("A1").Resize(8002).Value Application.ScreenUpdating = False For Each n In rngValue If n <> "" Then For i = 1 To 26 If i < 10 Then SepNumbers(i) = Mid$(n, i, 1) Else SepNumbers(i) = Mid$(n, 2 * i - 10, Int(Log(i) / Log(10#)) + 1) End If Next i With Cells(k, 1).Resize(, 26) .NumberFormat = "General" .Value = SepNumbers() End With k = k + 1 End If Next n Application.ScreenUpdating = True End Sub
- o_chi_chi
- ベストアンサー率45% (131/287)
一応マクロで。 Dim i As Long Dim j As Long Dim w As String For i = 1 To 8002 w = Cells(i, 1).Value For j = 1 To 26 Cells(i, j).Value = Mid$(w, j + IIf((j - 10) < 0, 0, j - 10), Len(j)) Next Next でも無理にA1セルの値をつかわなければ Dim i As Long Dim j As Long For i = 1 To 8002 For j = 1 To 26 Cells(i, j).Value = j Next Next でいいかと思いますが。
- traviq-ss
- ベストアンサー率16% (7/42)
これはマクロでやる必然性はありますか? 普通に関数での対応はどんなものでしょう。(もちろんVBでの対応も可能です) 予想するに固定長でのデータを各セルに分配しようとされているのではないでしょうか? 例) B1にmidb(a$1,1,1),C2にmidb(a$1,2,1)等入力し、右方面にドラッグ。さらに下方面にドラッグ。 各セルに出来上がったものをコピー、条件指定貼り付けで完了。 前述VBでというのも可能です。