プロが教えるわが家の防犯対策術!

エクセルで、○と入力したら、○の数の連番を振ることはできますか?
エクセル初心者です。

_ A列
1 ○1
2 ○2
3
4 ○3
5
6 ○4

出来ればつけた連番は○より小さくなるとありがたいです。
B列ではなく、A列の○の右横に反映させたいです。
マクロなら可能でしょうか?

A 回答 (5件)

ご紹介したマクロは,主に3つの部分(3つの仕事)で出来ています。




Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim h As Range
 Dim o As String

’Wクリックされたセルが目的の範囲内なのかどうか調べる部分
 if application.intersect(target, range("A1:A10")) is nothing then exit sub ’★

’Wクリックされたセルに○を記入したり消去する部分
 If Target = "" Then
  Target = "○"
 Else
  Target.ClearContents
 End If

’連番を振り直す部分
 Set h = Range(Target, Range("A10")).Find(what:="○", LookIn:=xlFormulas, lookat:=xlPart) ’★
 If Not h Is Nothing Then
  o = h.Address
  Do
   h = "○" & Application.CountIf(Range("A1:A" & h.Row), "○*") ’★
   h.Characters(2, 9).Font.Size = 9
   Set h = Range(Target, Range("A10")).FindNext(after:=h) ’★
  Loop Until h.Address = o
 End If
 Cancel = True
End Sub


ご覧になって判るようにA1からA10までの範囲で,という文言が各所(★を打った行)に出てきますから,そこを漏れなく直してください。
    • good
    • 0
この回答へのお礼

丁寧に説明してくださり、さらに
素晴らしい回答をどうもありがとうございました!
これで作業スピードが10倍くらいになった気がします!!
みんなも喜ぶと思います!

大変たすかりました!どうもありがとうございました!

お礼日時:2011/05/03 21:33

下記のようなマクロならできるが。


基本的なことだけで、エラー処理なんかはしてない。

SheetのWorkSheetモジュールに下記VBAを貼り付ける。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

c = 1
If Target.Column <> c Then Exit Sub
ri = 1
re = Rows(ActiveSheet.Rows.Count).End(xlUp).Row
i = 1

For r = ri To re
If Left(Cells(r, c), 1) = "○" Then
Cells(r, c) = "○" & i
i = i + 1
Cells(r, c).Characters(Start:=2, Length:=Len(i)).Font.Size = 8
End If
Next

Application.EnableEvents = True
End Sub
    • good
    • 0
この回答へのお礼

マクロを考えてくださりありがとうございます!
なるほど!と思えるようにもう少し勉強したいと思います。

回答ありがとうございました!

お礼日時:2011/05/03 21:41

できますかと言われれば,そりゃまぁ,やれば出来ます。



【手順】
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim h As Range
Dim o As String
Dim n As Long
 If Target.Column <> 1 Then Exit Sub
 If Target = "" Then
  Target = "○" & (1 + Application.CountIf(Range("A1:A" & Target.Row), "○*"))
  Target.Characters(2, 9).Font.Size = 9
 Else
  Target.ClearContents
 End If

 Set h = Range(Target.Offset(1), Range("A65536")).Find(what:="○", LookIn:=xlFormulas,  lookat:=xlPart)
 If Not h Is Nothing Then
  o = h.Address
  Do
   h = "○" & Application.CountIf(Range("A1:A" & h.Row), "○*")
   h.Characters(2, 9).Font.Size = 9
   Set h = Range(Target.Offset(1), Range("A65536")).FindNext(after:=h)
  Loop Until h.Address = o
 End If
 Cancel = True
End Sub

ファイルメニューから終了してエクセルに戻り,A列のセルでWクリックする。



でもまぁこんなマクロをただ作ってもらって,最初は物珍しくておもしろいかも?しれませんが,実際の仕事の場面で活用できるモノなのかはとても疑問に思われます。

【推奨】
素直にB列に
B2:
=IF(A2="○",COUNTIF($A$1:A2,A2),"")
以下コピー

などのような数式を並べて連番を計算させるなどしてご利用いただく事を考えた方が,何をやっているのかどうすればイイノカもご自分できちんと理解できて,実際の仕事は進むと思いますよ。

この回答への補足

たしかに!初心者の自分ではまったくわかりません!
しかし流石!といいますか、完璧です。頭が上がりません。
クリックして○をつける機能までご用意してくださるとは!なんという優しさ!
クリック機能くらいは自分で何とかしようと思っていたところでしたので
大変驚きました!ありがとうございます。たすかりました。

ちなみに推奨のほうも参考にさせていただきました。
なるほど、かんたんでしたね。。

この表は、「商品購入申し込み」の手書きの表を打ち込む際に使用しています。

とても素晴らしい案だと思いましたので、もうひとつ。

B列やC列、さらにはにどんな列にも反映させることはできますか?
逆に範囲を絞ることもできますでしょうか?
また、A列の1~10まで、と、範囲を指定することは可能でしょうか?

補足日時:2011/05/03 18:23
    • good
    • 0

○1 と入力したセルをアクティブにすると右下に小さい■がでるからそれをドラッグすれば可能です

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

回答ありがとうございます!

地声のほうが気になってしまうわたしw
素敵ですね!

お礼日時:2011/05/03 21:38

簡単な方法でしたら関数でCOUNTを使うと、シートにある数をカウントしてくれますそれを上から下に反映させて使えばいけますね

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

そうですね、その方法もありますね!
回答ありがとうございます^^

お礼日時:2011/05/03 21:35

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