エクセルで以下の事をしたいと考えていますが出来ません。
どなたか教えて下さい。
例として、
A列のセルに、●と◯と空白のセルがあります。
図示しますと以下のようになっています。
   A
1
2
3  ◯
4
5
6  ●
7
8  ●
9
10

となっているものを
例えば、A1から数えて、A6にある●は5つ目にあるので、●を5に替える。
A8の●はA6から数えて、2つ目なので、●を2に替える。
A3にある◯は無視してそのままとしたのですが、
DO~ Loopステートメント
Sub 空白()
Dim i As Integer
i = 1
Range("A1").Select
Do Until ActiveCell.Offset(1)(ActiveCell = "●")
ActiveCell.Offset(1).Select
i = i + 1
If ActiveCell <> "" Then Exit Do
Loop
ActiveCell.Value = i
ActiveCell.Offset(1).Select
End sub
まで考えたのですが、◯を無視することと、変数iを初期化する方法が解りません。
よろしくお願いします。

質問者からの補足コメント

  • うれしい

    早速ご教示いただき有難うございます。
    追加の質問なのですが、
    一つ目に、行の初めではなしに終わりからカウントするにはどうしたら良いのでしょう?
    二つ目に、○はそのままですが、●以外に、数字などがあっても●と同じようにカウントして数字に置き換えはできるのでしょうか?
    三つ目に、どの列でも出来るようにはどのようにすればいいのでしょう。
    追加でご教示いただければ、幸甚に思います。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/16 17:41
  • うれしい

    早速ご教示いただき有難うございます。
    追加の質問なのですが、
    一つ目に、行の初めではなしに終わりからカウントするにはどうしたら良いのでしょう?
    二つ目に、○はそのままですが、●以外に、数字などがあっても●と同じようにカウントして数字に置き換えはできるのでしょうか?
    三つ目に、どの列でも出来るようにはどのようにすればいいのでしょう。
    追加でご教示いただければ、幸甚に思います。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/07/16 17:41

A 回答 (5件)

No.4 の補足



字下げが無いと見難いのでイメージを付けておきます。
「エクセルVBA 初心者です。どなたか教え」の回答画像5
    • good
    • 0

「補足コメントについて」こんなのはいかがですか?


-------------------------------------------------------------------
Sub 一つ目プラス二つ目()
Dim 元 As Long
Dim 行 As Long
Dim 終 As Long
終 = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = 終 To 1 Step -1
If Cells(行, 1).Value <> "" Then
If Cells(行, 1).Value <> "◯" Then
If 元 = 0 Then
Cells(行, 1).Value = 0
Else
Cells(行, 1).Value = 元 - 行
End If
元 = 行
End If
End If
Next
End Sub
-------------------------------------------------------------------
    • good
    • 0

No.2 の補足コメントについて



一つ目
一番下の「●」は「0」にしてカウントするのでしょうか?

二つ目
「●」や「数字」はそれぞれ別にカウントするのでしょうか?

三つ目
「Cells(Rows.Count, 1)」の「1」をその列番号(左から何列目)にする
「Cells(行, 1)」の「1」をその列番号にする
    • good
    • 0
この回答へのお礼

ありがとう

再度、迅速にご教示いただきましてありがとうございます。
>一番下の「●」は「0」にしてカウントするのでしょうか?
そのとおりです。
>二つ目
「●」や「数字」はそれぞれ別にカウントするのでしょうか?
「数字」は「●」と同じとお考え下さい。数字が間違っている場合があるかもしれませんので、カウントをし直すということで、「●」と同じです。
>三つ目は、その通りさせていただきます。

何度もになりますがよろしくお願い申し上げます。

お礼日時:2017/07/16 20:15

こんなのはいかがでしょうか?


-------------------------------------------------------------------
Sub 空白()
Dim 元 As Long
Dim 行 As Long
Dim 終 As Long
元 = 1
終 = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = 1 To 終
If Cells(行, 1).Value = "●" Then
Cells(行, 1).Value = 行 - 元
元 = 行
End If
Next
End Sub
-------------------------------------------------------------------
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
使う関数が間違っていたのですね。

お礼日時:2017/07/16 17:33

書き換えてみました。

これで、どうでしょうか。
Sub 空白()
Dim i As Integer
Dim maxrow As Long
Dim row As Long
maxrow = Cells(Rows.Count, 1).End(xlUp).row 'Active sheet A列の最大行取得
i = 0
For row = 1 To maxrow
If Cells(row, "A").Value = "●" Then
Cells(row, "A").Value = i
i = 0
End If
i = i + 1
Next
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
使う関数が間違っていたのですね。

お礼日時:2017/07/16 17:33

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


人気Q&Aランキング

おすすめ情報