それもChatGPT!?と驚いた使用方法を教えてください

お世話になります。
Cのセルが空白でなかったら、Aのセルに順番に数値を入力したいのですが
このコードを実行すると、画像右のようにCの空白部分で
Aの番号が飛んでしまいます。
 
左の画像のようにしたいのですが、どなたか手直しを
していただけないでしょうか。
よろしくお願いします。

Sub NO1()
Dim i As Long
i = 9
For i = 9 To 35
If Range("C" & i).Value = "" Then
Range("A" & i).Value = ""
Else
Range("A" & i).Value = i - 8
End If
Next
End Sub

「VBA Cのセルが空白でなかったら、Aの」の質問画像

A 回答 (6件)

入力する番号を別変数に割り当てれば良いかと


一例です
Sub NO1()
  Dim i As Long, n As Long
  For i = 9 To 35
   If Range("C" & i).Value = "" Then
    Range("A" & i).Value = ""
   Else
    n = n + 1
    Range("A" & i).Value = n
   End If
  Next
End Sub
    • good
    • 1
この回答へのお礼

Qchan 1962さん
早速、回答していただきありがとうございました。
うまくできました。
お世話になりました。

お礼日時:2020/05/21 08:22

こんばんは!



すでに色々回答は出ていますが・・・
わざわざVBAでなくてもNo.2さんの数式でできると思います。

A9セルに
=IF(C9="","",COUNTA(C$9:C9))

としてフィルハンドルで下へコピー!

C列に数式が入っていて、数式によって空白に見えているのであれば
=IF(C9="","",COUNTIF(C$9:C9,"?*"))

という数式で対応できると思います。

どうしてもVBAでやりたい!というコトであれば

Sub Sample1()
 Dim lastRow As Long
  lastRow = Cells(Rows.Count, "C").End(xlUp).Row
   With Range(Cells(9, "A"), Cells(lastRow, "A"))
    .Formula = "=IF(C9="""","""",COUNTA(C$9:C9))"
    .Value = .Value
   End With
End Sub

でもいけると思います。
※ C列に数式が入っている場合は
コード内の数式の行も変えます。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん、早速回答ありがとうございました。
たくさんの方々に、色々な方法を教えていただき
勉強になります。
この方法でもやってみたいと思います。

お礼日時:2020/05/21 08:59

こんなのでも行けるかも・・・。



Sub sample()
With Range("C9:C35").SpecialCells(xlCellTypeConstants, 23).Offset(, -2)
.Cells(1).Value = 1
.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1
End With
End Sub
    • good
    • 0
この回答へのお礼

ママチャリさん、早速回答していただきありがとうございました。
色んな方法があって、素人には勉強になります。
この方法でもやってみます。

お礼日時:2020/05/21 08:47

ちょっと違った方法で。



Sub megu()
Dim r As Range, rr As Range
Dim n As Long

n = 0

For Each r In Range("C9:C35").SpecialCells(xlCellTypeConstants).Areas
For Each rr In r
n = n + 1
rr.Offset(, -2).Value = n
Next
Next

End Sub
    • good
    • 0
この回答へのお礼

めぐみんさん
早速、回答していただきありがとうございました。
色んなやり方があって、素人には勉強になります。
お世話になりました。

お礼日時:2020/05/21 08:44

そのコードは単に「上から何番目の行」という物ですね。



別にカウンタを設けましょう。
そのカウンタの値を書き出せば良い。
 j=j+1
でも良いし、
 count関数で上からいくつ値の入ったセルがあるかを数えてもいい。
それで解決すると思います。
    • good
    • 0
この回答へのお礼

銀鱗さん、早速、回答していただきありがとうございます。
j=j+1を追加してやってみます。
お世話になりました。

お礼日時:2020/05/21 08:36

こんにちは



入力する数字を、「i - 8」としているので、「行番号 - 8」となっていますね。
別に番号をカウントする変数(例えばn)を設けておけばよろしいかと思います。

Dim i As Long, n As Long
n = 1
For i = 9 To 35
If Range("C" & i).Value = "" Then
Range("A" & i).Value = ""
Else
Range("A" & i).Value = n
n = n + 1
End If
Next

でも、この程度であれば、A9セルに
 =IF(C9="","",COUNT(A$8:A8)+1)
を入力して、下方にフィルコピーでもこと足りると思います。
(これなら、C列に追加入力があると自動的に附番されます)

※ 上式はA1:A8が空白であるという仮定で作成しています。そうでない場合は「+1」の部分の数値を調整することで対応できると思います。
    • good
    • 0
この回答へのお礼

fujillinさん、早速回答していただきありがとうございました。
ご指摘のようにこれまでは、数式を入力してやっていたのですが
事情があってマクロですることにしました。
A1:A8は空白でないので、「+1」の部分の数値を変えて
やってみます。
お世話になりました。

お礼日時:2020/05/21 08:32

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A