Excel VBA質問箱 IV

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

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


334 / 3841 ページ ←次へ | 前へ→

【75744】Re:時間表示
お礼  yoyo  - 14/6/25(水) 22:27 -

引用なし
パスワード
   ▼γ さん:
>こんにちは。不思議ですね。
>こちらでは、そうしたことは起きませんねえ。
>
>こちらでも再現できるようなコードを提示してもらえませんか?
>文章ではなく、
>Sub で始まり、End Subで終わる、変数の宣言も含めたものを
>提示しませんか?

γ様

ご回答ありがとうございました。
また、文章にわかりにくい質問でご迷惑かけました。
状況はichinose様が記載されている通りの状況でした。
ichinose様の記載通りで解決できました。
お手間かけました。
・ツリー全体表示

【75743】Re:時間表示
発言  ichinose  - 14/6/25(水) 20:57 -

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

>エクセルVBAのフォームで時間表示することで
>つまづいてます。
>
>エクセルのセルから値を取得しフォームで下記のように指定してます。
>nt = Format(nt, "hh:mm")
>基本、表示できているのですが値が12:00の時だけ
>思うような表示になりません。
このntを説明する記述がありませんね!!
このntが何なのか? の説明をしてくださいね。
質問者がご自分が分からないところまで閲覧者を導く記述をする
これ、よい訓練になりますよ!!
>
>nt=セルの値
>セルには12:00と入ってます。セルの書式は[h]:mmで
>値を取得した時は0.5と表示されます。
>ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
>00:05と表示されます。
>セルの値が12:01の時はちゃんと12:01表示されますが
>12:00の場合のみの症状です。
>何か原因があるのでしょうか?
この現象が発生する場合のntは、

ntがString型の変数
ユーザーフォームという記述がありますから、
ntがテキストボックスコントロールの場合などこのような現象が
おこりますね!!

仮にntが文字列型変数の場合

sub test()
  dim nt as string
  nt=range("a1").value 'セルa1に12:00という時刻が入っているとすると
 'ntは、0.5という文字列が格納されます。0.5という数値ではありません。
 '困ったことに 文字列0.5は、0時5分と解釈してしまいます。よって、
 '記述されたような現象が発生します。ntがテキストボックスの場合も
 '同じです。
 msgbox format(nt,"hh:mm")
End sub
セルA1に6:00という時刻が入力されていても同じような現象が発生します

はっきり時刻型に変換してあげましょう


sub test2()
  dim nt as string
  nt=cdate(range("a1").value)
  nt=format(nt,"hh:mm")
  msgbox nt
end sub
・ツリー全体表示

【75742】Re:時間表示
回答  γ  - 14/6/25(水) 20:25 -

引用なし
パスワード
   こんにちは。不思議ですね。
こちらでは、そうしたことは起きませんねえ。

こちらでも再現できるようなコードを提示してもらえませんか?
文章ではなく、
Sub で始まり、End Subで終わる、変数の宣言も含めたものを
提示しませんか?
・ツリー全体表示

【75741】時間表示
質問  yoyo  - 14/6/25(水) 12:57 -

引用なし
パスワード
   エクセルVBAのフォームで時間表示することで
つまづいてます。

エクセルのセルから値を取得しフォームで下記のように指定してます。
nt = Format(nt, "hh:mm")
基本、表示できているのですが値が12:00の時だけ
思うような表示になりません。

nt=セルの値
セルには12:00と入ってます。セルの書式は[h]:mmで
値を取得した時は0.5と表示されます。
ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
00:05と表示されます。
セルの値が12:01の時はちゃんと12:01表示されますが
12:00の場合のみの症状です。
何か原因があるのでしょうか?

当方、Win7 excel2010にて作業してます。
・ツリー全体表示

【75740】Re:Valueと変数の使い方
回答  γ  - 14/6/25(水) 5:45 -

引用なし
パスワード
   >1.Valueプロパティは文字列だけではなく、数字は数字として処理してくれると考えていいですか?
そうです。
ヘルプを見ると、
>Range.Value プロパティ
>指定されたセル範囲の値を表すバリアント型 (Variant) の値を設定します。値の取得および設定が可能です
とあります。Variant型ですから、数値も文字列もOKです。
MsgBox TypeName(n)などとすると、Doubleと表示されます。(数値のデフォルトはDoubleです)

ただし、この場合、
>Cells(3, 21)と Cells(3, 23)には日付の日にち部分の数字
ということが解っているわけですから、
Dim n As Long
Dim m As Long
と型宣言しておくべきです。(下記補足(1)参照)

> 2.For A = n + 5 To m + 3 のように変数の中に変数を入れるのは問題はないですか?
問題ありません。
(なお、counterのstartとendの値は一度設定されるだけで、
  繰り返しの都度計算されるわけではありません。)

-----------------
なお、
(1)
変数は必ず宣言すべきです。
これがないと、変数のタイプミスがあっても、発見が遅れます。
宣言があれば、宣言せずに使った変数には警告が出ます。
また、特定の型にしておけば実行効率が上がると言われています。

Option Explicit
を一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出ます。

また、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。

(2)
繰り返しに使う変数は、Aといった変数名ではなく,i,j,k,l,m,nといったものを
使うのが普通です。これは多くの人が使う慣例のようなものです。
iは1,l と誤認しやすいので、一つだけの繰り返しなら、私は k を使うことが多いですね。

(3)
最後の繰り返しのところは、
Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"
といった書き方もできますね。
・ツリー全体表示

【75739】Valueと変数の使い方
質問  芸人  - 14/6/25(水) 1:00 -

引用なし
パスワード
   こんにちは。
初心者本を見ながらコードを書いていましたが
よくわからないうちに期待してた結果が出てしまいました。
しかし本当に正しいのかどうかわからないのでアドバイス願います。

Sub セルへの入力()
'
n = Cells(3, 21).Value
m = Cells(3, 23).Value

For A = n + 5 To m + 3
Cells(3, A).Value = "→"
Next A

End Sub

Cells(3, 21)と Cells(3, 23)には日付の日にち部分の数字が書いてあります。
E列から1日が始まるように考え、日にちCells(3, 21)と日にち Cells(3, 23)の
間の部分が→と書き込まれるように考えています。

アドバイスしていただきたいのは
1.Valueプロパティは文字列だけではなく、数字は数字として処理してくれると考えていいですか?

2.For A = n + 5 To m + 3 のように変数の中に変数を入れるのは問題はないですか?

毎度初歩的な質問で申し訳ないですが、ご回答いただけたら幸いです。
・ツリー全体表示

【75738】Re:LINEST関数に一次元配列を渡す際のエ...
回答  シーバ  - 14/6/24(火) 13:59 -

引用なし
パスワード
   すみません.自己解決しました.

配列中にNull値があるのはNGなんですね.
Redim Preserve x_value(n-1)
Redim Preserve y_value(n-1)
で解決出来ました.
・ツリー全体表示

【75737】LINEST関数に一次元配列を渡す際のエラー
質問  シーバ  - 14/6/24(火) 12:17 -

引用なし
パスワード
   VBAで一次元配列に格納した値を用いて線形近似したいのですが,エラーが出て実行できません.
以下のコードを実行したところ,「LinEstプロパティを取得できません」となってしまいます.

Dim x_value(1000) As Variant
Dim y_value(1000) As Variant

'inc_val毎のセル値を配列に格納
n=0
Do While n * inc_val < buf1
  x_value(n) = Range("A" & n * inc_val + 1).Value
  y_value(n) = Range("C" & n * inc_val + 1).Value
  n = n + 1
Loop

'線形近似式
With Application.WorksheetFunction
  Fit_res = .LinEst(y_value, x_value, True)
End With

VBA初心者なもので,どうすれば正しく動くのか分からず困っています.
ご教示のほどよろしくお願いします.
・ツリー全体表示

【75736】Re:Subのシステム的な意味
お礼  芸人  - 14/6/22(日) 22:32 -

引用なし
パスワード
   γ
さん、早くて明快な解答ありがとうございます。
おかげでSubと標準モジュールの理解が進みました。
ひとつだkでもちゃんと理解できれば残りも理解するモチベーションがあがります。
↓の内容もふんふんと合点できました。
これからイベントプロシージャにトライしていきたかったのでとても助かります。


>標準モジュールに書いたプロシージャは汎用的なので、
>他の標準モジュールやシートモジュールから、プロシージャ名だけで呼び出すことができます。(Privateなどの指定をしない場合です。)
>
>シートモジュールに書いたプロシージャは範囲が狭いです。
>他の標準モジュールやシートモジュールから呼ぶときは、シートモジュール名を頭につけて、
>Sub test()
>  Sheet1.sheet_test
>End Sub
>のようにしなければなりません。
>
>シートモジュールの用途は、
>・シートのイベントプロシージャ
>・ActiveXコントロールのイベントプロシージャ
>などです。これらは、そこに書かないと動作しません。
>
>また、シートモジュールに書いたプロシージャは、
>シートを削除すると、それに伴って消えますから、
>上記のような用途以外であれば、標準モジュールに書いた方がいいでしょう。
>
>システム的な意味というのが不明ですが、どう使うかという観点で
>大雑把に書いてみました。
・ツリー全体表示

【75735】Re:Subのシステム的な意味
発言  γ  - 14/6/22(日) 21:49 -

引用なし
パスワード
   > 1.サブプロシージャのサブというのは Subと同じものでしょうか?
はい、そうです。
なお、プロシージャには、Sub プロシージャ、Function プロシージャ、(Propertyプロシージャ)というのがあります。

> 2.時々Sub Mainというのもみかけますが Mainというのは単なるプログラムの名前でしょうか?
そうです。
Mainには、Subを統括するとか、そういう身分関係はなく、一兵卒です。
>
> 3.標準モジュールにSubを書くのと、シートモジュールにSubを書くのでは
> システム的になにか違ってきますでしょうか?
標準モジュールに書いたプロシージャは汎用的なので、
他の標準モジュールやシートモジュールから、プロシージャ名だけで呼び出すことができます。(Privateなどの指定をしない場合です。)

シートモジュールに書いたプロシージャは範囲が狭いです。
他の標準モジュールやシートモジュールから呼ぶときは、シートモジュール名を頭につけて、
Sub test()
  Sheet1.sheet_test
End Sub
のようにしなければなりません。

シートモジュールの用途は、
・シートのイベントプロシージャ
・ActiveXコントロールのイベントプロシージャ
などです。これらは、そこに書かないと動作しません。

また、シートモジュールに書いたプロシージャは、
シートを削除すると、それに伴って消えますから、
上記のような用途以外であれば、標準モジュールに書いた方がいいでしょう。

システム的な意味というのが不明ですが、どう使うかという観点で
大雑把に書いてみました。
・ツリー全体表示

【75734】Subのシステム的な意味
質問  芸人  - 14/6/22(日) 21:13 -

引用なし
パスワード
   基本的な質問ですいませんが、VBAやっていると
時々プロシージャやオブジェクトの意味がわからなくなってくる初心者です。

1.サブプロシージャのサブというのは Subと同じものでしょうか?

2.時々Sub Mainというのもみかけますが Mainというのは単なるプログラムの名前でしょうか?

3.標準モジュールにSubを書くのと、シートモジュールにSubを書くのでは
システム的になにか違ってきますでしょうか?

エクセルは2003を使ってます。
・ツリー全体表示

【75733】Re:ユーザーフォームの表示設定
発言  カリーニン  - 14/6/22(日) 12:18 -

引用なし
パスワード
   パーセント表示は↓でいかがでしょう?

Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox4
 .Value = Format(.Value, "0%")
End With
End Sub

セルの書式設定をマクロの自動記録したものを流用したものです。
・ツリー全体表示

【75732】Re:ユーザーフォームの表示設定
お礼  みき  - 14/6/22(日) 12:05 -

引用なし
パスワード
   早速の回答ありがとうございました。
明日、職場で試してみます。
またわからないときは質問させていただきますので、よろしくお願いします。
・ツリー全体表示

【75731】Re:ユーザーフォームの表示設定
発言  カリーニン  - 14/6/22(日) 12:02 -

引用なし
パスワード
   テキストボックスにあらかじめ日付けを入れておき、スピンボタンで日付を前後させる方法です。

'テキストボックスに一日前の日付けを入れなおす
Private Sub SpinButton1_SpinDown()
With Me.TextBox3
 .Value = CDate(.Value) - 1
End With
End Sub

'テキストボックスに一日後の日付けを入れなおす
Private Sub SpinButton1_SpinUp()
With Me.TextBox3
 .Value = CDate(.Value) + 1
End With
End Sub

ユーザーフォームの初期化/テキストボックスに日付を入力
Private Sub UserForm_Initialize()
Me.TextBox3.Value = Date
End Sub

他にも3つのリストボックスやコンボボックスを使って日付を指定する方法
などもあります。
・ツリー全体表示

【75730】Re:ユーザーフォームの表示設定
質問  みき  - 14/6/22(日) 12:01 -

引用なし
パスワード
   0.05と入力して5%と表示したいです。
・ツリー全体表示

【75729】Re:ユーザーフォームの表示設定
発言  カリーニン  - 14/6/22(日) 11:30 -

引用なし
パスワード
   >Textbox2 商品id

これはテキストボックスよりもリストボックスやコンボボックスが
適しているように思います。
・ツリー全体表示

【75728】Re:ユーザーフォームの表示設定
発言  カリーニン  - 14/6/22(日) 11:19 -

引用なし
パスワード
   >Textbox7 利率
>質問3.Textbox7をパーセント表示にしたい。

TextBox7にはどのような数字を入れてますか?

0.05
と入力して
5%
と表示したいのですか?

5
と入力して
5%
と表示したいのですか?

それとも別でしょうか?
・ツリー全体表示

【75727】Re:ユーザーフォームの表示設定
発言  カリーニン  - 14/6/22(日) 11:15 -

引用なし
パスワード
   TextBoxのExitイベントを使用した例です。

6/21
と入力しEnterを押すなりしてテキストボックスの値を確定させたら
2014/6/21
と表示が変わります。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
 .Value = Format(Date, "yyyy/") & .Value
End With
End Sub

でも、これはすべての入力が終わった時点でコマンドボタンなどで
処理した方がいいように思います。


1234
と入力しEnterを押すなりしてテキストボックスの値を確定させたら
1,234
と表示が変わります。

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox2
 If IsNumeric(.Value) Then .Value = Format(.Value, "0,000")
End With
End Sub

これもすべての入力が終わった時点でコマンドボタンなどで処理した
方がいいように思います。

>パーセント表示

これは分かりません。わかったら再度アップします。
・ツリー全体表示

【75726】ユーザーフォームの表示設定
質問  みき  - 14/6/22(日) 9:47 -

引用なし
パスワード
   ユーザーフォームで商品入力フォームを作成しています。

Textbox1 日付
Textbox2 商品id
Textbox3 商品名(vlookupで商品idから検索して表示しています)
Textbox4 単価(vlookupで商品idから検索して表示しています)
Textbox5 数量
Textbox6 金額(単価×数量で計算して表示しています)
Textbox7 利率

質問1.Textbox1に6/12と入力すると、2014/6/12と表示されるようにしたい。
質問2.Textbox4と6をカンマ表示にしたい。
質問3.Textbox7をパーセント表示にしたい。
・ツリー全体表示

【75725】Re:VBAによる時刻の比較
お礼  nh  - 14/6/20(金) 9:13 -

引用なし
パスワード
   ▼γ さん:
>Worksheets("main").Cells(7, 3) には、
>どのような形式の時刻が入っていますか?
>文字列ならTimevalueが必要ですが、
>23:10:00などと入力したのであれば、
>Timevalueは不要です。

Format(Now(), "hh:mm") で入れています。
Timevalue は要らなかったみたいですね
ありがとうございます。
・ツリー全体表示

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