痔になりやすい生活習慣とは?

マクロの設定の仕方について質問します。
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まで設定するにはどのようにしたらいのでしょうか。

何卒、よろしくお願い申し上げます。

このQ&Aに関連する最新のQ&A

A 回答 (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行に貼り付ければよい。
    • good
    • 0

こんにちは。



他の回答された方は、「自信あり」ですが、私には、良く分らないご質問だなって思います。

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

一応マクロで。


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
でいいかと思いますが。
    • good
    • 0

これはマクロでやる必然性はありますか?


普通に関数での対応はどんなものでしょう。(もちろんVBでの対応も可能です)

予想するに固定長でのデータを各セルに分配しようとされているのではないでしょうか?

例)
B1にmidb(a$1,1,1),C2にmidb(a$1,2,1)等入力し、右方面にドラッグ。さらに下方面にドラッグ。

各セルに出来上がったものをコピー、条件指定貼り付けで完了。

前述VBでというのも可能です。
    • good
    • 0

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


人気Q&Aランキング