- ベストアンサー
エクセルで、○について連番を自動で振るには?
エクセルで、○と入力したら、○の数の連番を振ることはできますか? エクセル初心者です。 _ A列 1 ○1 2 ○2 3 4 ○3 5 6 ○4 出来ればつけた連番は○より小さくなるとありがたいです。 B列ではなく、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までの範囲で,という文言が各所(★を打った行)に出てきますから,そこを漏れなく直してください。
その他の回答 (4)
- okormazd
- ベストアンサー率50% (1224/2412)
下記のようなマクロならできるが。 基本的なことだけで、エラー処理なんかはしてない。 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
お礼
マクロを考えてくださりありがとうございます! なるほど!と思えるようにもう少し勉強したいと思います。 回答ありがとうございました!
- keithin
- ベストアンサー率66% (5278/7941)
できますかと言われれば,そりゃまぁ,やれば出来ます。 【手順】 シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける 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まで、と、範囲を指定することは可能でしょうか?
- frown_knight
- ベストアンサー率30% (234/777)
○1 と入力したセルをアクティブにすると右下に小さい■がでるからそれをドラッグすれば可能です
お礼
回答ありがとうございます! 地声のほうが気になってしまうわたしw 素敵ですね!
- muchon
- ベストアンサー率26% (18/69)
簡単な方法でしたら関数でCOUNTを使うと、シートにある数をカウントしてくれますそれを上から下に反映させて使えばいけますね
お礼
そうですね、その方法もありますね! 回答ありがとうございます^^
お礼
丁寧に説明してくださり、さらに 素晴らしい回答をどうもありがとうございました! これで作業スピードが10倍くらいになった気がします!! みんなも喜ぶと思います! 大変たすかりました!どうもありがとうございました!