[[20141113102431]] 『セルの表示形式』(muku) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの表示形式』(muku)

こんにちは!
よねさんのVBA を勉強していますhttp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_numberformatlocal.html

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim unit
  Dim myVal
  Dim i As Long
    If Target.Count <> 1 Then Exit Sub
    If Target.Column = 2 And Target.Row > 1 Then
      myVal = Range("H1", Range("H" & Rows.Count).End(xlUp)).Resize(, 2).Value
      For i = 1 To UBound(myVal)
        If myVal(i, 1) = Target.Offset(, -1).Value Then
          unit = myVal(i, 2)
          Exit For
        End If
      Next i
      unit = "\#,##0" + """" + "/" + unit + """"
      Target.NumberFormatLocal = unit
    End If
End Sub

これを実行するとA列に
Sub rei19_01()
  Range("A1:A3").Value = 1234.5
  Range("A1").NumberFormatLocal = "#,###.#"
  Range("A2").NumberFormatLocal = "[緑]#,###.#"
  Range("A3").NumberFormatLocal = "[DBNum1][赤]#,###.#"
End Sub

この部分が入ってきます。
なぜこうなるのでしょうか?
お教えください。手間のかかる初心者ですみません

< 使用 Excel:Excel2013、使用 OS:Windows8.1 >


 もしかしてPrivate Sub Worksheet_Change(ByVal Target As Range) のコードを
 標準モジュールに貼り付けていませんか?シートモジュールに貼り付けてください。
 違っていたらすいません。
(se_9) 2014/11/13(木) 11:01

シートモジュール(Sheet2)に貼り付けてもA1:A3には下記が実行されてしまいます
なぜでしょうか?標準モジュールが張り付いてしまっています。そしてB列は変化しません

Sub rei19_01()
  Range("A1:A3").Value = 1234.5
  Range("A1").NumberFormatLocal = "#,###.#"
  Range("A2").NumberFormatLocal = "[緑]#,###.#"
  Range("A3").NumberFormatLocal = "[DBNum1][赤]#,###.#"
End Sub

よろしくお願いします
(muku) 2014/11/13(木) 14:40


 マクロの実行ボタン押してませんか?シートモジュールの方は通常のマクロと違い
 上記コードの内容ではB列のセルに変化があった時のみマクロが動きます。
 マクロの実行ボタンを押さずB列に数値を入れてみてください。
(se_9) 2014/11/13(木) 14:48

ありがとうございます。すべてマクロの実行ボタンを押していました(VBAの中の実行ボタン)
Private Subはシートモジュールにコードを書かなくてはいけないことも知りませんでした
すべて標準モジュールでいいと思っていました。標準モジュール、シートモジュール、Classモジュールの使い方をもっと理解しないといけないですね
本日はサンプルをやりながらいろいろ検索もしていました

VBAについてはhttp://officetanaka.net/excel/index.htmこのサイトがわかりやすく説明されていますね
マクロとVBAは違うことそしてVBAの基本をもっと知らないとだめだとお痛感しています
いろいろご教授ありがとうございます

(muku) 2014/11/13(木) 15:49


 こんにちは。
 解決したのでもう見ていらっしゃらないですかね。
 
 VBAも含めてExcel全般を勉強するなら、こちらのサイトもお勧めですよ。
 http://www.asahi-net.or.jp/~ef2o-inue/top01.html

 特にデバッグの仕方なども丁寧に説明してあるので、ぜひ参考にしてください。

(めいぷる) 2014/11/13(木) 16:10


 >マクロとVBAは違うこと

 こんなのが定説になると困るなあ。

 同じと思ってくださいよ。
 何の為に区別するんですか?

 今のエクセルにとっちゃ「マクロ」なんて死語同然なんです。

 古いことを色々知っている人間が惰性で使っているだけです。私もその一人ですけど。

 あと、この記述は違和感あります。
 >unit = "\#,##0" + """" + "/" + unit + """"

 文字の連結に「+」なんて使わないでください。
 加算かと思っちゃいます。「&」を使ってください。

 またそれは、これと同じことですよ。
         
  unit = "\#,##0""/" & unit & """"

(半平太) 2014/11/13(木) 16:21


皆様ありがとうございます。まだまだ知らないことばかりでやらなければいけないことがいっぱいです。
ただ今やりだしていろいろなコードの記述方法が理解できていないのが本音です。
たとえば下記のようなコードは何をもって作っていくのが分からないです
そのようなことをどうやって理解していけばよいのでしょうか
変数にDimを使うことはわかりますが・・・
理解できる方法を教えてほしいです。慣れることなのでしょうか
このような時はどうしてこのようにに記述する説明があれば理解できると思うのですが
馬鹿ですみません!!習得する方法は????

Sub rei20_3b()
Dim c As Range
Dim i As Long
Dim F1 As Long, F2 As Long
  For Each c In Selection
    c.Font.ColorIndex = xlColorIndexAutomatic
    For i = 1 To Len(c.Text)
      Select Case Mid(c.Value, i, 1)
        Case "「"
          F1 = i
        Case "」"
          F2 = i
          c.Characters(F1 + 1, F2 - F1 - 1).Font.ColorIndex = 3
        End Select
    Next i
  Next c
End Sub
(muku) 2014/11/13(木) 17:01


 先に紹介した以下のサイト
 「Excelでお仕事」http://www.asahi-net.or.jp/~ef2o-inue/top01.html
 で勉強して下さい。

 左側のメニューに「VBA基本」「VBA応用」とありますので、まずは基本から
 一通り読まれることをお勧めします。
 今すぐやりたいことがあっても、"急がば回れ"です。

 「VBA基本」の中に「自動記録(記憶)から始める」という章があります。
 大抵は、やりたいことを日本語で組み立て⇒マクロの自動記録⇒自動記録されたものを修正
 こんな手順で作っていきます。

 また、「仕様要件からコードの組み立てを考える」という章があります。 
 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_160.html

 "この章は、少しVBAをカジり始めた方に読んでいただこうと作成しました"と書かれていますが、
 自分のやりたいことをExcel君にやってもらうために、どのように考えて組み立てるかということに
 ついて書かれています。

  また、ネットなどで見つけたサンプルコードで分からないところは、まずヘルプを読んで下さい。

(めいぷる) 2014/11/13(木) 17:13


他人が作ったコードを理解する早道は、使っている単語を片っ端からググる事です。

たとえば、今回のマクロならば、「For Each c In Selection」このあたりが判らないとします。
Dim は変数宣言である、とは理解しているので、c というのは変数名だ、任意に付けた名前だ、と判るでしょう。
なので、キーワードからcは抜きます。

次に、Excel VBAのコーディングなのだから、対象を絞るために、これも追加してググりましょう。
「For Each In Selection excel vba」こんなキーワードで検索し、出てきたページを順番に見ていきましょう。
一字一句、読む必要はありません。簡単そうで判りそうだな、と思ったところを読んでみてください。

ベテランが10カ所くらい調べて作成するものを、初心者なら100カ所くらい調べる必要があるとします。
ここで「判らない!」と言う場合、実は100カ所のうち、2,3カ所くらいしか見てなかったりします。
ベテランでも10カ所は調べるのに、2,3カ所で判るわけがないですよね。

「初心者だから判らない」のではなく、「初心者なのに、判るまで調べきっていない」という場合が多かったりします。
「馬鹿だから判らない」なんてことはありません。最初は知らないのが当たり前です。判らなかったら調べれば良いのです。
(???) 2014/11/13(木) 17:32


ありがとうございます。参考にさせていただいてブックマークバーに配置いたしました。いろいろ勉強しなければいけないことがいっぱいありますが今月は先週までマクロの基本をやっていました(本当の基本です)
今週からVBAをやりだしましたが途中で悩んでしまいました。上記サイトを参考にしてやらせていただきます
ありがとうございました。
(muku) 2014/11/13(木) 18:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.