Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11197 / 13644 ツリー ←次へ | 前へ→

【17494】Format関数について RB26DETT 04/8/31(火) 19:32 質問[未読]
【17495】Re:Format関数について Asaki 04/8/31(火) 19:41 回答[未読]
【17497】Re:Format関数について こもれび 04/8/31(火) 20:38 発言[未読]
【17500】Re:Format関数について RB26DETT 04/8/31(火) 21:20 お礼[未読]
【17505】Re:Format関数について Asaki 04/8/31(火) 22:18 回答[未読]
【17513】Re:Format関数について こもれび 04/9/1(水) 0:01 発言[未読]
【17522】Re:Format関数について RB26DETT 04/9/1(水) 9:38 お礼[未読]
【17521】Re:Format関数について RB26DETT 04/9/1(水) 9:24 回答[未読]
【17523】Re:Format関数について RB26DETT 04/9/1(水) 9:46 発言[未読]

【17494】Format関数について
質問  RB26DETT  - 04/8/31(火) 19:32 -

引用なし
パスワード
   こんばんは、ご質問があります。

VBAのマクロにて、計算結果(変数A)を、セル(celA)にいれようとしています。
( こんな感じです → Sheets(Sheet1).Range("celA").Value = 変数A )

仮に、ここで、変数Aの値が
「99999」
である場合、セル(celA)に、
「99,999」
と、いう風に入れたいんです。
この場合、Format関数はどのように使用したら良いのですか?


小数点第1位までなら、確かこんなんですよね?
Format(Sheets(Sheet1).Range("celA").Value, "0.0") = 変数A
だから、Format関数が使えるかなぁ〜と、思たんですが…

【17495】Re:Format関数について
回答  Asaki  - 04/8/31(火) 19:41 -

引用なし
パスワード
   こんばんは。

↓こんな雰囲気でどうですか?
Sheets(Sheet1).Range("celA").Value = format(変数A,"#,##0")

若しくは、予め、セルの書式をカンマ区切りにしておくなどでは?

【17497】Re:Format関数について
発言  こもれび  - 04/8/31(火) 20:38 -

引用なし
パスワード
   こもれびです

Format関数の質問以前に、作られた式を実際にためされましたか?
実際にサンプルを作ってみて、どのような結果になるか確かめて
わからなければまずは「ヘルプ」を見てみましょう。

サンプルを作るときは実際に必要な表示方法だけでなく、表示方法
が変化した場合などを想定したものを作ってみます。
これをやらないとなかなか身につきません。

お書きになった式について回答して下さる方が、「Format関数は
こう使う」と式の書き方を書いたのではそのうちに泥沼に入る
ことになりかねません。

私の気がつく範囲で確認していただきたいヘルプは次の2つです。

1.Valueプロパティのヘルプ

2.Format関数のヘルプと「数値を表すその他の書式」および「数値表示書式指定文字」や「数値表示書式指定文字の使用例」

【17500】Re:Format関数について
お礼  RB26DETT  - 04/8/31(火) 21:20 -

引用なし
パスワード
   こんばんは。
Asakiさん、こもれびさん、
お返事ありがとうございます。


>Format関数の質問以前に、作られた式を実際にためされましたか?
はい。実際に試しました。
どんなのかというと、
Format(Sheets(Sheet1).Range("celA").Value, "##,###") = 変数A
…こんなんです。

実際、動かしてみると、
「99,999」
と、出力されました。


ここで、Asakiさんの回答とヘルプを見てみると、
「"#,##0"」
と、何やら、最後に"0"が付いておりました。

どちらが正解なのか、よくわからなかったのと、
一般的に使用されるロジックが知りたかったため、
ご質問させて戴いた次第です。

で、いったい「"#,##0"」と「"#,###"」では、
何が違うんでしょうか???
出力は同じなんですが…

【17505】Re:Format関数について
回答  Asaki  - 04/8/31(火) 22:18 -

引用なし
パスワード
   >「"#,##0"」と「"#,###"」では、何が違うんでしょうか???
変数A = 0
の場合でお試しください。
違いがわかると思います。

処理としては、
変数Aの書式を加工して、セルcelA に表示
ですから、Format() を作用させるのは 変数A に対して、ですよね?
>Format(Sheets(Sheet1).Range("celA").Value, "##,###") = 変数A
この式では、Format() という関数に対して 変数A を代入することになり、
セルへの代入にはなっていません。

>実際、動かしてみると、
>「99,999」
>と、出力されました。
↑の式で動いたんですか?

【17513】Re:Format関数について
発言  こもれび  - 04/9/1(水) 0:01 -

引用なし
パスワード
   こもれびです

職業柄ではなく、職場柄… 「そんなこともあるの?」と聞くと
私の場合試さずにはいられなくなるのですが、記述された式を
試してみると私の環境では「型の不一致」エラーが発生しますけど…

Asaki さんもお書きになっていらっしゃいましたが、あの式で
結果が出たのですか?
私が先の投稿でValueのヘルプとFormatのヘルプを見て…と
書いたのは、明らかに式そのものに間違いがあってそれを
そのまま質問箱に書かれていたからです。

少し解説しておきますと、
Sheetsコレクションで特定のワークシートを名前で指定する場合は
Sheets("Sheet1")のようにダブルクォーテーションで括らなければ
この時点で型の不一致が発生します。
(コレクションの括弧の中はindex)

さらに、Asakiさんが「関数に対して変数Aを代入…」と書かれてい
るとおり仮にダブルクォーテーションで括ってあったとしても
オブジェクトエラーが出るはずです。

【17521】Re:Format関数について
回答  RB26DETT  - 04/9/1(水) 9:24 -

引用なし
パスワード
   おはようございます。


>処理としては、
>変数Aの書式を加工して、セルcelA に表示
>ですから、Format() を作用させるのは 変数A に対して、ですよね?
>>Format(Sheets(Sheet1).Range("celA").Value, "##,###") = 変数A
>この式では、Format() という関数に対して 変数A を代入することになり、
>セルへの代入にはなっていません。

すいません、完全なるうつし間違いです。
この場合、正しくは、
Sheets(Sheet1).Range("celA").Value = Format(変数A, "##,###")
ですね。。。


しかし、なんでこんな式か?と申しますと…
他に、Format関数を適用して、
セル"celA1"にセル"celB1"を格納しようとしている処理(下記参照)がありまして、
その式とごっちゃになってました。
(そこの右辺だけを中途に移しておりました…)

Sheets(Sheet1).Range("celA1").Value
= Format(Sheets(Sheet1).Range("celB1").Value, "##,###")

ほんまに、大変失礼しました。。。すんません


>>実際、動かしてみると、
>>「99,999」
>>と、出力されました。
>↑の式で動いたんですか?

掲載した→Format(Sheets(Sheet1).Range("celA").Value, "##,###") = 変数A
では、やっておりませんが、
Sheets(Sheet1).Range("celA1").Value
= Format(Sheets(Sheet1).Range("celB1").Value, "##,###")
では、「99,999」と、表示されました。

ちょっと、"0"で試してみます。

良いアドバイスをありがとうございました。

【17522】Re:Format関数について
お礼  RB26DETT  - 04/9/1(水) 9:38 -

引用なし
パスワード
   >少し解説しておきますと、
>Sheetsコレクションで特定のワークシートを名前で指定する場合は
>Sheets("Sheet1")のようにダブルクォーテーションで括らなければ
>この時点で型の不一致が発生します。

度重なる誤りをお許し下さい。
すいません。ここに掲載するために、一部、実際のソースを変更しておりました。
→シート名を「Sheet1」に変更したのですが、
そのときに、ダブルクォーテーションを付け忘れておりました。


ここで、実際のソースを掲載します。

Sheets(strSheetName).Range("celComment_1").Value _
      = "[長さ]: 1. " & Format(Trim$(Sheets(GET_DATA_SHEET).Range("AC" & lngGetDataCnt + 6).Value), "##,###") & " (m), " & _
            "2. " & Format(Trim$(Sheets(GET_DATA_SHEET).Range("AD" & lngGetDataCnt + 6).Value), "##,###") & " (m)"

ここで、
・strSheetName:シート名
・celComment_1:セル名
・GET_DATA_SHEET:シート名
・lngGetDataCnt:Long型変数
です。

これを掲載するのはややこしいなぁ〜っと思て、簡単に掲載したんですが、
そこで、ボロボロと誤記や私の勘違いが発生したみたいです。
大変ご迷惑をおかけ致しました。

以後、気をつけます。

【17523】Re:Format関数について
発言  RB26DETT  - 04/9/1(水) 9:46 -

引用なし
パスワード
   何度もすんません。

先に、
>Sheets(Sheet1).Range("celA1").Value
>= Format(Sheets(Sheet1).Range("celB1").Value, "##,###")
と、書きましたが、チョンプロを掲載すると…

           ↓

Private Sub CommandButton1_Click()
  Dim Sheet1 As String
  
  Sheet1 = "Sheet1"
  
  Sheets(Sheet1).Range("A1").Value _
  = Format(Sheets(Sheet1).Range("B1").Value, "##,###")
End Sub

です。

※「Sheet1」 は、変数として扱ってましたことを補足致します。

11197 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free