Excel VBA質問箱 IV

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

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


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

【79132】Re:指定セルが変更&空欄でない場合
発言  マナ  - 17/5/19(金) 19:27 -

引用なし
パスワード
   ▼カン さん:

>しかし、空欄(クリア)だった場合はこのプログラムは走らせたくありません。
>(何か文字が入力された場合のみ走らせたい。)

その理由(目的)は、エラーがでるからでしょうか?
だとしたら、それはクリアが問題ではなく
複数セルを同時に変更するからです。
・ツリー全体表示

【79131】Re:指定セルが変更&空欄でない場合
発言  カリーニン  - 17/5/19(金) 17:15 -

引用なし
パスワード
   Target.Value

で判断しては?
・ツリー全体表示

【79130】指定セルが変更&空欄でない場合
質問  カン  - 17/5/19(金) 13:09 -

引用なし
パスワード
   指定セルが変更された場合にその入力文字を小文字に変更したく、
それは、下記プログラムでできました。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("C2:C5")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
    Target.Value = LCase(Target.Value)
  Application.EnableEvents = True
End Sub

しかし、空欄(クリア)だった場合はこのプログラムは走らせたくありません。
(何か文字が入力された場合のみ走らせたい。)

よろしくお願いします。
・ツリー全体表示

【79129】Re:型が違います
お礼  Ackkn E-MAIL  - 17/5/17(水) 9:59 -

引用なし
パスワード
   ▼Ackkn さん:
>▼カリーニン さん:
>>試しに、セルに
>>
>>="00:15"+"00:32"
>>
>>としてみてください。セルの書式をを時刻形式にしておけば
>>0:47:00
>>と表示されると思います。
>>これは、"00:15"や"00:32"という文字列をエクセルが自動的に時刻データ
>>と判断してシリアル値に変えてくれているからです。
>>
>>逆に、
>>=00:15+00:32
>>とすることは出来ません。シリアル値やセルを参照する場合は直接指定できますが、文字列を
>>指定する場合は""で括る必要があります。
>>
>>シリアル値の一日は「1」
>>シリアル値の一時間は「1/24」
>>シリアル値の一分は「1/(24*60)」
>>になります。
>>
>>ワークシートで8:47を15分で丸める場合です。
>>=FLOOR("8:47","0:15")
>>=FLOOR("8:47",1/(24*4))
>>=FLOOR(0.365972222222222,1/(24*4))
>>
>>セルの場合は、このように入力した「時刻のように見える」数値や文字列を自動的にシリアル値
>>に変換して計算してくれます。
>>VBAでは、ユーザーが命令しないといけません。
>
>カリーニン さん:
>
>ありがとうございます。
>なるほど、分かりました。
>
>そういうことですね。
>早速確認してみます。

カリーニン さん:
マナ さん:

無知な私にお付き合いくださり、ありがとうございました。
無事に動きましたことご報告いたします。
ワークシート関数をVBAで使う場合のシート上での動作と違うこと
を知り、大変勉強になりました。
以下に最終コードを載せておきます。
本当にありがとうございました。

  Set xlAPP = Application
  tm_str = "09:12"
  tm_tmp = TimeValue(tm_str)
  tm_tmp = xlAPP.WorksheetFunction.Floor(tm_tmp, TimeValue("00:15"))
  tm.Value = Format(tm_tmp, "HH:MM")
・ツリー全体表示

【79128】Re:型が違います
発言  Ackkn  - 17/5/17(水) 6:37 -

引用なし
パスワード
   ▼カリーニン さん:
>試しに、セルに
>
>="00:15"+"00:32"
>
>としてみてください。セルの書式をを時刻形式にしておけば
>0:47:00
>と表示されると思います。
>これは、"00:15"や"00:32"という文字列をエクセルが自動的に時刻データ
>と判断してシリアル値に変えてくれているからです。
>
>逆に、
>=00:15+00:32
>とすることは出来ません。シリアル値やセルを参照する場合は直接指定できますが、文字列を
>指定する場合は""で括る必要があります。
>
>シリアル値の一日は「1」
>シリアル値の一時間は「1/24」
>シリアル値の一分は「1/(24*60)」
>になります。
>
>ワークシートで8:47を15分で丸める場合です。
>=FLOOR("8:47","0:15")
>=FLOOR("8:47",1/(24*4))
>=FLOOR(0.365972222222222,1/(24*4))
>
>セルの場合は、このように入力した「時刻のように見える」数値や文字列を自動的にシリアル値
>に変換して計算してくれます。
>VBAでは、ユーザーが命令しないといけません。

カリーニン さん:

ありがとうございます。
なるほど、分かりました。

そういうことですね。
早速確認してみます。
・ツリー全体表示

【79127】Re:型が違います
発言  カリーニン  - 17/5/17(水) 0:26 -

引用なし
パスワード
   試しに、セルに

="00:15"+"00:32"

としてみてください。セルの書式をを時刻形式にしておけば
0:47:00
と表示されると思います。
これは、"00:15"や"00:32"という文字列をエクセルが自動的に時刻データ
と判断してシリアル値に変えてくれているからです。

逆に、
=00:15+00:32
とすることは出来ません。シリアル値やセルを参照する場合は直接指定できますが、文字列を
指定する場合は""で括る必要があります。

シリアル値の一日は「1」
シリアル値の一時間は「1/24」
シリアル値の一分は「1/(24*60)」
になります。

ワークシートで8:47を15分で丸める場合です。
=FLOOR("8:47","0:15")
=FLOOR("8:47",1/(24*4))
=FLOOR(0.365972222222222,1/(24*4))

セルの場合は、このように入力した「時刻のように見える」数値や文字列を自動的にシリアル値
に変換して計算してくれます。
VBAでは、ユーザーが命令しないといけません。
・ツリー全体表示

【79126】Re:型が違います
発言  Ackkn  - 17/5/17(水) 0:05 -

引用なし
パスワード
   ▼カリーニン さん:
>"00:15"
>は文字列ですよね?

カリーニン さん:

そうです。
・ツリー全体表示

【79125】Re:型が違います
発言  カリーニン  - 17/5/16(火) 23:51 -

引用なし
パスワード
   "00:15"
は文字列ですよね?
・ツリー全体表示

【79124】Re:型が違います
発言  Ackkn  - 17/5/16(火) 23:41 -

引用なし
パスワード
   ▼カリーニン さん:
>横から失礼します。
>
>エクセル2007で試した限りではTimeValue関数とWorksheetFunction.Floorの組み合わせで
>いけましたけど。
>
>tm_tmp = WorksheetFunction.Floor(TimeValue(tm_str), TimeValue("00:15"))

カリーニン さん:

ありがとうございます。

会社のExcelのバージョンを明日確認して再度テストしてみます。
ただ、違いはFloor関数の中の"00:15"もTimeValueで変換する必要が
ありますか?
Excelシート上でテストした際は、単に"00:15"でいけましたので、
ここだけ違います。
・ツリー全体表示

【79123】Re:型が違います
発言  カリーニン  - 17/5/16(火) 23:23 -

引用なし
パスワード
   横から失礼します。

エクセル2007で試した限りではTimeValue関数とWorksheetFunction.Floorの組み合わせで
いけましたけど。

tm_tmp = WorksheetFunction.Floor(TimeValue(tm_str), TimeValue("00:15"))
・ツリー全体表示

【79122】Re:型が違います
発言  Ackkn  - 17/5/16(火) 22:33 -

引用なし
パスワード
   ▼マナ さん:
>▼Ackkn さん:
>
>>TimeValue関数は、調べましたらWorksheetFunctionでは使えないと
>>ありました。
>>困ったものです。
>
>VBAに同名の関数があります。
>ht tp://www.239-programing.com/excel-vba/func/func036.html

マナ さん

ありがとうございます。
また一つ勉強になりました。

でも、この関数は単に文字列をDate型の値に変換してくれる
だけで、肝心な15分単位での丸めはできません。
この機能にWorksheetFunctionでFloorやCeilingを使いたいのですが、
例の型が違いますで使えないので質問した次第です。
よろしくお願いします。
・ツリー全体表示

【79121】Re:型が違います
発言  マナ  - 17/5/16(火) 20:24 -

引用なし
パスワード
   ▼Ackkn さん:

>TimeValue関数は、調べましたらWorksheetFunctionでは使えないと
>ありました。
>困ったものです。

VBAに同名の関数があります。
ht tp://www.239-programing.com/excel-vba/func/func036.html
・ツリー全体表示

【79120】Re:型が違います
発言  Ackkn E-MAIL  - 17/5/16(火) 19:43 -

引用なし
パスワード
   ▼マナ さん:
>▼Ackkn さん:
>
>>型が違いますでエラーになります。
>
>TimeValue関数を使用したらどうなりますか?

マナさん

TimeValue関数は、調べましたらWorksheetFunctionでは使えないと
ありました。
困ったものです。
・ツリー全体表示

【79119】Re:型が違います
発言  マナ  - 17/5/16(火) 19:16 -

引用なし
パスワード
   ▼Ackkn さん:

>型が違いますでエラーになります。

TimeValue関数を使用したらどうなりますか?
・ツリー全体表示

【79118】型が違います
質問  Ackkn E-MAIL  - 17/5/16(火) 17:35 -

引用なし
パスワード
   お世話になります。

Dim tm_tmp As Date
Dim tm_str As String

文字列の時刻をループで15分丸めをしたいのですが、下の
行で、実行時エラー'13' 型が違いますでエラーになります。

tm_str = "09:12"
tm_tmp = WorksheetFunction.Floor(tm_str, "00:15")

よろしくお願いいたします。
・ツリー全体表示

【79117】Re:リンク(外部)が切れているセルの抽...
お礼  tt  - 17/5/15(月) 12:00 -

引用なし
パスワード
   ▼γ さん:
ご回答ありがとうございます!
ご教示頂いたとおりにやってみます。

結果は改めてご報告させていただきますね!
・ツリー全体表示

【79116】Re:リンク(外部)が切れているセルの抽...
発言  γ  - 17/5/13(土) 11:54 -

引用なし
パスワード
   訂正です。
Set ht = CreateObject("Msxml2.ht.6.0")
のところ誤変換されてしまっています。

"Msxml2.ht.6.0"の htのところを
アルファベットで エイチ ティー ティー ピー としてください。

# > 迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。
# ということで、ht・・の4文字は入力を受け付けてくれないのです。
# それで変数をhtの二文字にしたのだけど、CreateObjectのところも同時に
# 誤変換してしまった次第。
・ツリー全体表示

【79115】Re:リンク(外部)が切れているセルの抽...
回答  γ  - 17/5/13(土) 8:10 -

引用なし
パスワード
   以下のようなものを念頭に置いていました。

Dim ht As Object

'' url がネット上にあれば Trueを返し、なければ Falseを返す。
Function checkURL(url As String) As Boolean
  If ht Is Nothing Then
    Set ht = CreateObject("Msxml2.ht.6.0")
  End If
  ht.Open "HEAD", url, False
  ht.send
  checkURL = ht.Status = 200
End Function

'テスト検証
Sub test()
  Dim url As String
  
  url = "ht tp://www.vbalab.net/img/spacer.gif" ' スペース取る必要あり
  Debug.Print checkURL(url)
End Sub

前回うっかり回答コメントをしてしまいましたが、
質問を読み返すと、ECサイトの運用にかかわる方なんでしょうか。
それなら、周りに専門家がいくらでもいるでしょう。
こうした質問などせずに、内部で解決するべきではないですか?

なお、認証への対応が必要なはずで、上記のものでは足りません。
それは承知しています。
もし、Basic認証であれば、
AuthorizationヘッダーにBase64エンコード処理を施したIDやpwdをセットする
方法で対応できるはずです。ネット上にサンプルもあります。

業務でしょうから、こうした場で質問するより、
きちんと内部で対応されることをお勧めします。
組織としてきちんと対応するべき事柄です。
不測のことが起きても、責任は負いかねます。
・ツリー全体表示

【79114】Re:VBAの1か月の日にちを表記し”日”も...
お礼  かな  - 17/5/12(金) 17:22 -

引用なし
パスワード
   ▼亀マスター さん:
とてもわかりやすく、その他のご指摘もご教示いただきまして大変恐縮しております。
回答ありがとうございました。
・ツリー全体表示

【79113】Re:VBAの1か月の日にちを表記し”日”も...
回答  亀マスター  - 17/5/12(金) 17:06 -

引用なし
パスワード
   考え方で大きくふたつあります。

まず、単純に「1日」「2日」という文字列をセルに入れたいということであれば、

Dim i as Integer
For i = 1 to 31
  Cells(5 + i, i) = i & "日"
Next i

のようにすればいいです。
i & "日" で、数字+「日」になります。
示されたコードではわざわざwを使っていますが、これは不要でしょう。

ただし、これだと入力した情報が文字列として扱われ、計算するための数字として使えません。
(「1日」というデータに対して+1しても「2日」とはできません)
計算に使いたいのであれば、上記のコードで「 & "日"」の部分を除き、
VBAではなくエクセルのシート上でセルの書式を「0日」としてください。
それなら、内容としてはただの数字だが、表示は「1日」のように表示されます。


なお、示されたコードでいくつか気になることがあります。

まず、変数 iを使っているのに、それを宣言しているところがありません。
設定で変数の宣言を強制するようにしていなければこれでも動きますが、バグの元になるので、変数の宣言は強制するようにしておいた方がいいでしょう。

また、変数aとwの型をByte型にしているのも気になります。
小さな数字を入れるのだからByte型でいいだろうということなのかもしれませんが、一般的にByte型を使う場合にはそれなりに理由があり、整数を扱うのであれば通常はInteger型かLongを使います。

ForループでStep 1とするのも無意味ですね。
Step 1は書かなくてもForループでは1ずつ増えるようになっていますし、1以外ずつ増えたり減ったりする場合だけ記述すればいいです。
・ツリー全体表示

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