• 締切済み

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まで設定するにはどのようにしたらいのでしょうか。 何卒、よろしくお願い申し上げます。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

例示はわかりやすいことが多いですが、この例では、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)
回答No.3

こんにちは。 他の回答された方は、「自信あり」ですが、私には、良く分らないご質問だなって思います。 >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)
回答No.2

一応マクロで。 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)
回答No.1

これはマクロでやる必然性はありますか? 普通に関数での対応はどんなものでしょう。(もちろんVBでの対応も可能です) 予想するに固定長でのデータを各セルに分配しようとされているのではないでしょうか? 例) B1にmidb(a$1,1,1),C2にmidb(a$1,2,1)等入力し、右方面にドラッグ。さらに下方面にドラッグ。 各セルに出来上がったものをコピー、条件指定貼り付けで完了。 前述VBでというのも可能です。

関連するQ&A