A列に1から200までの数値がランダムかつ歯抜け有りで並んでるとします。
これをB”A列に記した数値”のセルに移動することはできますか?
A列に35とあればB35のセルに移動またはB35のセルに何か文字列を打ち込む感じです。
A列が空欄の時は未処理にできればなおよいです。。。
よろしくお願いします。

A 回答 (5件)

>各命令文を教えて頂けないでしょうか?



VBEで、ステートメントにカーソルを置いて、[F1]でヘルプが表示されます。
ネットで検索しても沢山見つかります。

>If IsNumeric(Cells(i, 1)) And Cells(i, 1) > 0 Then
条件は「値が数値」であり(AND)「0よりも大きい」時に成立します。
値が0やマイナス、文字の場合だとエラーになるので、無用なエラーを防ぐために値をチェックします。

>Range("A" & i)
'&' は、文字列を結合します。
"A" という文字と i の値を結合し、"A1" のようになります。

St = "A1:C10,F1:F10"
Range(St).Clear
と記入しても応用できます。

>Cells(i, 1)

Cells は、セルの列と行を1から始まる数値で指定します。

>ボタンを押すたびにB列、C列、D列・・・

似たような動作をするように改造しました。
どのような場合に正しく動作するかは、プログラムを読んで実験して見てください。

Sub warp03() ' Cells()
Dim i As Integer
Dim x As Integer
x = ActiveSheet.UsedRange.Columns.Count + 1
For i = 1 To 200
If IsNumeric(Cells(i, 1)) And Cells(i, 1) > 0 Then
Cells(Cells(i, 1), x) = Cells(i, 1)
End If
Next
End Sub

Sub warp04() ' Range()
Dim i As Integer
Dim x As Integer
x = ActiveSheet.UsedRange.Columns.Count
For i = 1 To 200
If IsNumeric(Range("A" & i)) And Range("A" & i) > 0 Then
Range("A" & Range("A" & i)).Offset(0, x) = Range("A" & i)
End If
Next
End Sub

>A列を新たに打ち込むたびに

VBAで「改変されたかどうか」を調べるのはちょっと面倒です。
ボタンを押して、その都度実行しましょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
マクロをマスターできるとなんでもできますね。

お礼日時:2005/04/18 08:50

まあ、こんな風にも出来ますね。



Sub test1()
 Dim nums As Variant
 nums = Range("A1", Range("A65536").End(xlUp)).Value
 'Range("A1", Range("A65536").End(xlUp)).ClearContents
 '移動なら、「'」を外す
 For Each n In nums
  If n > 0 And IsNumeric(n) Then
   Cells(n, 2).Value = n
   '文字を入れるのでしたら、上記「=n 」の代わりに、「= "ok"」などとする
  End If
 Next n
End Sub

この回答への補足

ありがとうございます。文字列を入れれました。
ボタンにこのマクロを設定し、ボタンを押すたびにB列、C列、D列・・・とA列を新たに打ち込むたびに列を変えていけますか??

補足日時:2005/04/15 15:46
    • good
    • 0

こんな感じで如何でしょうか。



移動ですよね。

Sub Test()
Dim Rng As Range
For Each Rng In Range("A1", Range("A65536").End(xlUp))
  If IsNumeric(Rng.Value) And Rng.Value <> "" Then
    If Rng.Value >= 1 And Rng.Value <= 65536 Then
      Range("B" & Int(Rng.Value)).Value = Rng.Value
      Rng.ClearContents '   <--- コピーするのであれば不要
    End If
  End If
Next Rng
End Sub

この回答への補足

ありがとうございます。
狙ったとおりの機能になっています。
多少のアレンジを加えるために、マクロ初心者にもわかるように各命令文を教えて頂けないでしょうか?
移動もできてしまうなら文字列を打ち込むこともできますか?

補足日時:2005/04/15 15:42
    • good
    • 0

2つの方法が有ります。



Sub warp01() ' Cells()
Dim i As Integer
For i = 1 To 200
If IsNumeric(Cells(i, 1)) And Cells(i, 1) > 0 Then
Cells(Cells(i, 1), 2) = Cells(i, 1)
End If
Next
End Sub

Sub warp02() ' Range()
Dim i As Integer
For i = 1 To 200
If IsNumeric(Range("A" & i)) And Range("A" & i) > 0 Then
Range("B" & Range("A" & i)) = Range("A" & i)
End If
Next
End Sub

この回答への補足

ありがとうございます。
どちらの方法でも狙ったとおりの機能になっています。
多少のアレンジを加えるために、マクロ初心者にもわかるように各命令文を教えて頂けないでしょうか?

補足日時:2005/04/15 15:41
    • good
    • 0

こんな感じでしょうか。


移動ではなくコピーという形にしていますが。

Sub セル記入()
Dim i As Integer
Dim j As Integer
Dim k As Integer

i = 1
j = 1
For i = 1 To 200

k = Cells(i, j).Value
Debug.Print k
If k > 0 Then
Cells(k, j + 1).Value = k
End If
Next

End Sub

この回答への補足

ありがとうございます。
狙ったとおりの機能になっています。
多少のアレンジを加えるために、マクロ初心者にもわかるように各命令文を教えて頂けないでしょうか?

補足日時:2005/04/15 15:39
    • good
    • 0

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


人気Q&Aランキング