!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part69
https://mevius.5ch.net/test/read.cgi/tech/1607786543/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Excel VBA 質問スレ Part70
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b6da-6NWR)
2021/03/18(木) 22:08:43.71ID:jtngtgXU02デフォルトの名無しさん (ワッチョイ 013d-drwQ)
2021/03/18(木) 22:33:41.83ID:e6JgDwDC0 教えて下さい。
あるシートに買物記録があり、日付や購入店、商品名や単価の他に、商品の分類という列があります。
その列には「文具」「食品」「書籍」等が入力されています。
VBAで以下の動作をさせたいです。
↓
別シートにあるダウンリストに、選択肢として、この商品分類に入力されている値を設定する。
重複して入力されている値は無視。入力されているすべての「分類」をひとつずつ選択肢にする。
↑
これをどう書けばいいのか、教えて下さい。
よろしくお願いいたします。
あるシートに買物記録があり、日付や購入店、商品名や単価の他に、商品の分類という列があります。
その列には「文具」「食品」「書籍」等が入力されています。
VBAで以下の動作をさせたいです。
↓
別シートにあるダウンリストに、選択肢として、この商品分類に入力されている値を設定する。
重複して入力されている値は無視。入力されているすべての「分類」をひとつずつ選択肢にする。
↑
これをどう書けばいいのか、教えて下さい。
よろしくお願いいたします。
3デフォルトの名無しさん (ワッチョイ 13ad-7MQm)
2021/03/19(金) 02:09:13.85ID:pQtJO8X70 関数でも分類列をMATCHで検索してRow()と不一致なら空白として、それを入力規則にすれば出来そう
VBAでやるなら連想配列使って重複弾いて、かな
VBAでやるなら連想配列使って重複弾いて、かな
4デフォルトの名無しさん (アウアウウー Sa5d-dI/L)
2021/03/19(金) 12:08:42.44ID:Efxeclnea >>2
もう少し個別にどの部分で詰まっているか書いた方がいいんじゃね
もう少し個別にどの部分で詰まっているか書いた方がいいんじゃね
5デフォルトの名無しさん (ワッチョイ 4901-gJ6t)
2021/03/19(金) 12:19:16.87ID:Rf8ZEH4N0 >>2
ワークシート関数でいいなら
適当なセルに
=UNIQUE(商品の分類が入力された列)
と入力すると重複整理された配列が入力される
プルダウンリストを作りたいセルを選択して「データの入力規則」を選択、
規則をリスト、ソースをさっき作った配列がある列にする
ワークシート関数でいいなら
適当なセルに
=UNIQUE(商品の分類が入力された列)
と入力すると重複整理された配列が入力される
プルダウンリストを作りたいセルを選択して「データの入力規則」を選択、
規則をリスト、ソースをさっき作った配列がある列にする
6デフォルトの名無しさん (アウアウウー Sa5d-/HWa)
2021/03/19(金) 13:13:27.10ID:LUl3FuSJa ピボットグラフのRefresh処理が重くて困ってます
汎用的な処理中に停止すべき項目(画面描画、自動計算、イベント、アラート等)は停止させています
元テーブルの行は100程度です
処理を軽くする方法があればご教示願います
汎用的な処理中に停止すべき項目(画面描画、自動計算、イベント、アラート等)は停止させています
元テーブルの行は100程度です
処理を軽くする方法があればご教示願います
7デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/19(金) 20:19:38.16ID:TXt81ZmU0 >>6
ピボットテーブルの設定で「更新時に列幅を自動調整する」のチェックを外す
ピボットテーブルの設定で「更新時に列幅を自動調整する」のチェックを外す
8デフォルトの名無しさん (ワッチョイ 4901-gJ6t)
2021/03/19(金) 20:23:00.26ID:Rf8ZEH4N0 ググるとそれ出て来るけど、あんまり意味ないよ
って言いつつ効果あったら恥ずかしいけど
って言いつつ効果あったら恥ずかしいけど
9デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/19(金) 22:16:15.80ID:TXt81ZmU0 初心者にはそのくらいしか教えられん
10デフォルトの名無しさん (アウアウウー Sa5d-/HWa)
2021/03/19(金) 22:28:12.63ID:ZGQ0wMm+a11デフォルトの名無しさん (ワッチョイ 4901-gJ6t)
2021/03/19(金) 23:06:18.73ID:Rf8ZEH4N0 というか元々のグラフ生成が重いのかマクロが重いのか分からん
普通に更新ボタン押しても重いの?
普通に更新ボタン押しても重いの?
12デフォルトの名無しさん (アウアウウー Sa5d-/HWa)
2021/03/19(金) 23:55:25.74ID:tSoX9T0pa13デフォルトの名無しさん (ワッチョイ 4901-gJ6t)
2021/03/20(土) 00:13:52.57ID:1HieLmil0 グラフ更新よりも関数で固まってる可能性の方が高いから、
一度全部の関数を削除してみて解決するか確認した方がいいと思う
自動計算切っててもピボット更新時に再計算されてる筈だし
一度全部の関数を削除してみて解決するか確認した方がいいと思う
自動計算切っててもピボット更新時に再計算されてる筈だし
14デフォルトの名無しさん (アウアウウー Sa5d-/HWa)
2021/03/20(土) 01:01:30.93ID:7VltWvHha >>13
ありがとうございます
ワークシート関数は使わず、計算は全部vbaでやっています
関数と言えるのはピボットグラフのグラフ部分だけです
ピボットグラフのグラフ部分の関数が重くなっている可能性が考えられるかも、と思いました
ありがとうございます
ありがとうございます
ワークシート関数は使わず、計算は全部vbaでやっています
関数と言えるのはピボットグラフのグラフ部分だけです
ピボットグラフのグラフ部分の関数が重くなっている可能性が考えられるかも、と思いました
ありがとうございます
15デフォルトの名無しさん (ワッチョイ 09da-dI/L)
2021/03/20(土) 04:43:36.06ID:kQoUW+sA0 すげえなワークシート関数一切使わんでマクロだけでやるとは
16デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/20(土) 06:51:00.93ID:EyTYq69F0 遅いとか速いとか漠然としているので何秒かかっているかもわからんし
データ量やステップが増えればある程度遅くなるのは当然じゃね
データ量やステップが増えればある程度遅くなるのは当然じゃね
17デフォルトの名無しさん (ワッチョイ b15f-1iFT)
2021/03/20(土) 07:28:18.81ID:/meO8w1y0 2〜3秒でも遅いと思う人もいるしね
18デフォルトの名無しさん (ワッチョイ 7b35-cZ1W)
2021/03/20(土) 10:08:34.03ID:D1FjuE5r0 VBA使ってんならどの部分でどんだけ時間かかってるか測定すりゃいいだけの話なのになぜしないんだろう
19デフォルトの名無しさん (アウアウウー Sa5d-/HWa)
2021/03/20(土) 11:15:44.57ID:Awf5aTeqa20デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/20(土) 20:35:40.01ID:EyTYq69F0 PCの性能が低いんじゃね
21デフォルトの名無しさん (ワッチョイ 09da-dI/L)
2021/03/20(土) 20:48:09.36ID:kQoUW+sA0 それだ!
パソコンのせい
ゲーミング用買えば全てにおいてスマホ級の速さだ!
パソコンのせい
ゲーミング用買えば全てにおいてスマホ級の速さだ!
2021/03/21(日) 16:59:06.62
5chのスレで1000まで書き込まれたスレを1から1000までコピペしてsheet1に貼り付け
sheet1を特定のキーワードで検索して、書き込まれたレスと返信があったレスを抽出してsheet2に貼り付けしたいです
返信がない場合は空白と入力したいです
アイデアが思い付きません、宜しくお願いします
sheet1を特定のキーワードで検索して、書き込まれたレスと返信があったレスを抽出してsheet2に貼り付けしたいです
返信がない場合は空白と入力したいです
アイデアが思い付きません、宜しくお願いします
23デフォルトの名無しさん (ワッチョイ b15f-1iFT)
2021/03/21(日) 17:54:39.86ID:fT/r6tJT0 いつもの
24デフォルトの名無しさん (ワッチョイ d17c-0ZVt)
2021/03/21(日) 21:09:20.26ID:aZS3hsKq0 >>6
イベントやアラートって目的も無く停止しない方がいいと思うが
イベントやアラートって目的も無く停止しない方がいいと思うが
25デフォルトの名無しさん (ラクッペペ MMeb-GXsX)
2021/03/22(月) 05:59:51.89ID:B7/s/yNjM >>22
5chアフィ乙
5chアフィ乙
26デフォルトの名無しさん (アウアウウー Sa5d-TxCv)
2021/03/23(火) 06:37:42.10ID:3hKAtAlua エクセルからhtmlで保存するとき
グラフが1000以上でもできますか
グラフが1000以上でもできますか
27デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/23(火) 10:17:41.75ID:lizcePOK0 自分で作らずに質問してくる意味が解らない
28デフォルトの名無しさん (ワッチョイ 298e-GJb0)
2021/03/23(火) 14:45:46.64ID:KXdqd9JD0 ゆとりだから
29デフォルトの名無しさん (ワッチョイ 5190-U6ZO)
2021/03/23(火) 15:16:16.58ID:J1vTYXys0 選択した範囲をグラフにするマクロを作りたいです
マクロ記録でグラフ化するまでを記録し、それを改造してやっているのですが
' Macro1 Macro
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlRadar
ActiveChart.SetSourceData Source:=Range(左上:右下)
End Sub
「選択してる範囲を取得」してその範囲を代入する方法がよくわかりません
ActiveChart.SetSourceData Source:=Range(左上:右下)
のRangeの左上、右下部分にSelection(1)やSelection(Selection.Count)を入れようとしてるのですがエラーになります
マクロ記録でグラフ化するまでを記録し、それを改造してやっているのですが
' Macro1 Macro
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlRadar
ActiveChart.SetSourceData Source:=Range(左上:右下)
End Sub
「選択してる範囲を取得」してその範囲を代入する方法がよくわかりません
ActiveChart.SetSourceData Source:=Range(左上:右下)
のRangeの左上、右下部分にSelection(1)やSelection(Selection.Count)を入れようとしてるのですがエラーになります
30デフォルトの名無しさん (JP 0H63-THbH)
2021/03/23(火) 17:44:03.01ID:XH4udpo7H selectionだけでいいんじゃね
31デフォルトの名無しさん (ワッチョイ 13ad-7MQm)
2021/03/23(火) 17:59:59.95ID:dulEqDGL0 チャートをセレクトしてるからセルのセレクトが外れてるんだよ
Addchartの時にセレクトじゃなくてオブジェクト変数にセットして
アクティブチャートの行を【変数名】.(以下略)にしてやってみ
変数にセットするときに文頭のSetを忘れないようにな
Addchartの時にセレクトじゃなくてオブジェクト変数にセットして
アクティブチャートの行を【変数名】.(以下略)にしてやってみ
変数にセットするときに文頭のSetを忘れないようにな
32デフォルトの名無しさん (ワッチョイ 71fd-ED79)
2021/03/24(水) 18:47:39.00ID:7fnGaRlR0 エラー処理で On Error GoTo を On Err GoTo と書いていて
全く気付かずエラーになって初めて、ラベルに飛ばないので気づきました。
デバッグでは判定しないようですが、これらを事前にチェックで見つけることは
出来ないのですかね?
全く気付かずエラーになって初めて、ラベルに飛ばないので気づきました。
デバッグでは判定しないようですが、これらを事前にチェックで見つけることは
出来ないのですかね?
33デフォルトの名無しさん (テテンテンテン MMeb-g1di)
2021/03/24(水) 19:49:11.93ID:SmPCs0wuM ヤフーファイナンスの仕様が変わった?のか、
当該銘柄のページから
Set FR = rngResult.Find(What:="出来高*", LookAt:=xlWhole)
みたいな感じで出来高取得してたのが
できなくなった
どこを直せばいいのかわからん
もしかしてこのやり方では
取得できなくなった?
当該銘柄のページから
Set FR = rngResult.Find(What:="出来高*", LookAt:=xlWhole)
みたいな感じで出来高取得してたのが
できなくなった
どこを直せばいいのかわからん
もしかしてこのやり方では
取得できなくなった?
34デフォルトの名無しさん (ドコグロ MM63-xhhb)
2021/03/24(水) 19:50:41.85ID:jjB0JAKeM >>32
まともなコードならGoto文なんてたいしてないはずだからGoto検索して目視確認で良いんじゃね?
まともなコードならGoto文なんてたいしてないはずだからGoto検索して目視確認で良いんじゃね?
3529 (ワッチョイ 9990-oXDN)
2021/03/24(水) 20:04:27.24ID:lll8bKoA0 うまくいきました、ありがとうございました
もう一つ質問させてください
以下は↓の画像のようにデータを範囲選択し実行した場合、3項目ごとに3つのグラフを表示するマクロです
@https://i.imgur.com/qb9quh1.jpg
Sub Macro1()
' Macro1 Macro
Set CTop = Selection(1)
Set CLast = Selection(Selection.Count)
Dim i As Integer
For i = 0 To 2
y = i * 3
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlRadar
.SetSourceData Source:=Range(CTop.Offset(0, y), CLast.Offset(0, y))
End With
Next i
End Sub
ただ、データに問題があり、「行9」以降の部分を抜き出してグラフを作りたいんです
そこで↓のように範囲選択をして実行したのですが、系列名が出ないのでどのデータかわかりにくいんですよね
Ahttps://i.imgur.com/u2vrDOl.jpg
実際のデータは膨大なため、いちいち「行○○〜行○○まで」と数値で指定するのは難しいです
できればA画像のように手動で範囲選択した場合、@のようにa,b,cと系列名が出るのが理想です
.SetSourceData Source:=Range(○○) の部分をうまく変更すればいいのか、それとも
.SeriesCollection(1).Name = ○○ とあとで系列名を変えるのが良いのでしょうか?
もう一つ質問させてください
以下は↓の画像のようにデータを範囲選択し実行した場合、3項目ごとに3つのグラフを表示するマクロです
@https://i.imgur.com/qb9quh1.jpg
Sub Macro1()
' Macro1 Macro
Set CTop = Selection(1)
Set CLast = Selection(Selection.Count)
Dim i As Integer
For i = 0 To 2
y = i * 3
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlRadar
.SetSourceData Source:=Range(CTop.Offset(0, y), CLast.Offset(0, y))
End With
Next i
End Sub
ただ、データに問題があり、「行9」以降の部分を抜き出してグラフを作りたいんです
そこで↓のように範囲選択をして実行したのですが、系列名が出ないのでどのデータかわかりにくいんですよね
Ahttps://i.imgur.com/u2vrDOl.jpg
実際のデータは膨大なため、いちいち「行○○〜行○○まで」と数値で指定するのは難しいです
できればA画像のように手動で範囲選択した場合、@のようにa,b,cと系列名が出るのが理想です
.SetSourceData Source:=Range(○○) の部分をうまく変更すればいいのか、それとも
.SeriesCollection(1).Name = ○○ とあとで系列名を変えるのが良いのでしょうか?
36デフォルトの名無しさん (ワッチョイ 13ad-7MQm)
2021/03/24(水) 20:32:05.20ID:HXzqnMHf0 個人的には系列名変える方が好き
>>32
インタプリタは事前に文法チェックをしないのが普通ですから、そういうのはインタプリタには無理でしょう‥‥
インタプリタは事前に文法チェックをしないのが普通ですから、そういうのはインタプリタには無理でしょう‥‥
38デフォルトの名無しさん (ワッチョイ b92f-6umI)
2021/03/24(水) 22:00:53.02ID:T3engiTo0 いまどき純粋なインタプリタなんてそうそうないけどな
一応VBAは事前にコンパイルチェックできるが、>>32は
On 変数 GoTo xxっていう文法があってそれにそっているからエラーにならない
そして変数宣言を強制しても、Errって組み込みオブジェクトが宣言なしで使えるという罠
なんかコード分析するようなツールでもあれば検出できるかもしれんが、まあ標準の範囲じゃ無理だな
一応VBAは事前にコンパイルチェックできるが、>>32は
On 変数 GoTo xxっていう文法があってそれにそっているからエラーにならない
そして変数宣言を強制しても、Errって組み込みオブジェクトが宣言なしで使えるという罠
なんかコード分析するようなツールでもあれば検出できるかもしれんが、まあ標準の範囲じゃ無理だな
39デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/24(水) 22:54:43.12ID:/MIQ1K/L0 >>35
元データと選択された表示用データを別にすればいいんじゃね
元データと選択された表示用データを別にすればいいんじゃね
40デフォルトの名無しさん (ワッチョイ 1363-ED79)
2021/03/25(木) 01:08:37.06ID:QAr0K9ya0 いきなりアホになってコード組むのが劇遅くなりました。
きれいなコードを書こうと思ったんです。
きれいなコードを書こうと思ったんです。
41デフォルトの名無しさん (アウアウウー Sa5d-dI/L)
2021/03/25(木) 04:40:02.78ID:d+5Eu7Qca 思っただけにしとけ
4232 (ワッチョイ 71fd-ED79)
2021/03/25(木) 10:21:24.54ID:Btw5OylJ0 ありがとうございました。
自分で注意深くやるしかないんですね
実行中のfunction(やsub)名を取得することは可能でしょうか?
やりたいことはエラー処理時にその名称を表示したいのですが
べた書きするしかないですかね
Public Function test() As String
On Error testErr
testErrr:
MsgBox "testErr" & vbCrLf & "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description, vbExclamation
End Function
自分で注意深くやるしかないんですね
実行中のfunction(やsub)名を取得することは可能でしょうか?
やりたいことはエラー処理時にその名称を表示したいのですが
べた書きするしかないですかね
Public Function test() As String
On Error testErr
testErrr:
MsgBox "testErr" & vbCrLf & "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description, vbExclamation
End Function
43デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/25(木) 10:44:00.77ID:kL+lpreE0 あくまで個人的だが
MsgBox "○○で異常が発生しました." & vbCrLf & "Err:" & Err.Number & " " & Err.Description, vbExclamation, "Function test"
MsgBox "○○で異常が発生しました." & vbCrLf & "Err:" & Err.Number & " " & Err.Description, vbExclamation, "Function test"
44デフォルトの名無しさん (ブーイモ MM4d-7MQm)
2021/03/25(木) 12:19:36.16ID:v0lS7PpFM 個人的には、だけど最終的にはエラー停止が発生せずイレギュラーの場合は自らメッセージを出して処理を終了するってするのが望ましいんじゃないかなぁ
動作確認で何実行してるか知りたいだけなら各プロシージャの頭にDebug.Printでプロシージャ名吐き出しておけばどこで止まったかが分かりやすい
まぁDebug.Printって軽くはないから少し大きめのプログラムだと動作確認中は時間かかる感じになっちゃうだろうけど
動作確認で何実行してるか知りたいだけなら各プロシージャの頭にDebug.Printでプロシージャ名吐き出しておけばどこで止まったかが分かりやすい
まぁDebug.Printって軽くはないから少し大きめのプログラムだと動作確認中は時間かかる感じになっちゃうだろうけど
45デフォルトの名無しさん (ワッチョイ 0bda-4Ddi)
2021/03/25(木) 13:26:17.29ID:kL+lpreE0 確かにそうだ、異常が出ないで済むように入力データのチェックとか
ファイルの有無とかを先に確認すればエラーなんか滅多に起きないからな
ファイルの有無とかを先に確認すればエラーなんか滅多に起きないからな
46デフォルトの名無しさん (ワッチョイ 71fd-ED79)
2021/03/25(木) 13:41:18.71ID:Btw5OylJ0 >>45
勿論そういうチェックは入れていますよ
勿論そういうチェックは入れていますよ
47デフォルトの名無しさん (JP 0H4d-4Ddi)
2021/03/25(木) 14:16:03.41ID:NGSCZFfJH ちゃんとチェックしてればOn Errorの出番なんか滅多にないはずだけど
複数の関数でエラーが出るなんて、あきらかに設計がおかしい
複数の関数でエラーが出るなんて、あきらかに設計がおかしい
48デフォルトの名無しさん (ワッチョイ 134f-uqQH)
2021/03/25(木) 20:31:33.14ID:hvCMihey0 >>42
そうだね。VBAと言うかVB6系のは基本ベタ書きするしかない。
例外としてクラシックASPでVBS走らせたときはエラー行を表示させることが出来る。
VB.Netになるとその辺の情報は細やかに取得出来る。
VBAはベースが古い言語だから仕方がない。
そうだね。VBAと言うかVB6系のは基本ベタ書きするしかない。
例外としてクラシックASPでVBS走らせたときはエラー行を表示させることが出来る。
VB.Netになるとその辺の情報は細やかに取得出来る。
VBAはベースが古い言語だから仕方がない。
49デフォルトの名無しさん (ワッチョイ 134f-uqQH)
2021/03/25(木) 20:56:22.97ID:hvCMihey0 >>47
別に設計がおかしいと言うことはないよ。
これはVBAに限らず論理エラーで把握しきれないものは実行時エラーとして捕まえる仕組みは当然のように設定する場合がある。
例えばDBに繋ぎに行って繋がったけどその後で何らかしらの外部的要因で切断された場合など、
実行時エラーが発生するのでその場合は何度か再接続を試みてダメだったら初めてエラーとしてポップアップするとか。
その場合、当然データ復旧させるためにもどこでどんなことやろうとして落ちたのかの情報は重要になってくることが多い。
その他にも概ね実行時エラーは予期せず落ちるものの方が多いので
むしろ状況を把握するためにも細かい情報が必要になることの方が多いよ。
別に設計がおかしいと言うことはないよ。
これはVBAに限らず論理エラーで把握しきれないものは実行時エラーとして捕まえる仕組みは当然のように設定する場合がある。
例えばDBに繋ぎに行って繋がったけどその後で何らかしらの外部的要因で切断された場合など、
実行時エラーが発生するのでその場合は何度か再接続を試みてダメだったら初めてエラーとしてポップアップするとか。
その場合、当然データ復旧させるためにもどこでどんなことやろうとして落ちたのかの情報は重要になってくることが多い。
その他にも概ね実行時エラーは予期せず落ちるものの方が多いので
むしろ状況を把握するためにも細かい情報が必要になることの方が多いよ。
50デフォルトの名無しさん (JP 0H4d-4Ddi)
2021/03/25(木) 21:30:34.23ID:NGSCZFfJH それってVBAでやるようなことか?
例外処理が必要とわかってるなら.netで書いてTry Catchを使うべきだと思うが
例外処理が必要とわかってるなら.netで書いてTry Catchを使うべきだと思うが
51デフォルトの名無しさん (ワッチョイ 134f-uqQH)
2021/03/25(木) 22:07:43.24ID:hvCMihey0 >>50
.Netの環境が選択出来る状況ならそれでもいいんじゃないの?
.NetならException継承して好きにエラー設定すればいい。
けどここはあくまでEXCEL VBAのスレだからその話は置いておくよ。
後、VBAでやることかどうかと言うのはあくまで俺はだけど正直あまり選択基準にないな。
第一に要件を満たしているか、次に操作や保守がし易いかかな。まぁ、納期も重要な要素にはなるけど。
だからもし後で保守するのが楽になるなら
場合によってはエラーメッセージ出しておしまいにすることもあるだろうけど
場合によってはエラーハンドリング用のクラス作ったり、
論理エラーもRaiseして実行時エラーのように処理して一元管理したり、
後始末処理をコールバックで移譲して処理したりすることも視野に入れるよ。
.Netの環境が選択出来る状況ならそれでもいいんじゃないの?
.NetならException継承して好きにエラー設定すればいい。
けどここはあくまでEXCEL VBAのスレだからその話は置いておくよ。
後、VBAでやることかどうかと言うのはあくまで俺はだけど正直あまり選択基準にないな。
第一に要件を満たしているか、次に操作や保守がし易いかかな。まぁ、納期も重要な要素にはなるけど。
だからもし後で保守するのが楽になるなら
場合によってはエラーメッセージ出しておしまいにすることもあるだろうけど
場合によってはエラーハンドリング用のクラス作ったり、
論理エラーもRaiseして実行時エラーのように処理して一元管理したり、
後始末処理をコールバックで移譲して処理したりすることも視野に入れるよ。
52デフォルトの名無しさん (ワッチョイ b609-6iI7)
2021/03/26(金) 01:12:09.52ID:ZoYVceoP0 Date型はミリ秒を持てないのでしょうか?
エクセルシートでミリ秒まで表示できている時刻があって、そのシリアル値をVBAのDate型変数に代入するとミリ秒以下が丸められてしまいます
エクセルシートでミリ秒まで表示できている時刻があって、そのシリアル値をVBAのDate型変数に代入するとミリ秒以下が丸められてしまいます
53デフォルトの名無しさん (ワッチョイ 655f-luGl)
2021/03/26(金) 01:52:58.20ID:YMBMwB0G0 >>52
時分秒までです。
時分秒までです。
54デフォルトの名無しさん (ワッチョイ 655f-luGl)
2021/03/26(金) 01:56:39.74ID:YMBMwB0G0 >>52
Date型に入れて何がしたかったのか?
Date型に入れて何がしたかったのか?
55デフォルトの名無しさん (ワッチョイ 12ad-krmx)
2021/03/26(金) 02:03:12.37ID:NYhr3fTi0 日付を扱うならDate型使うけど
時間を扱うならDouble型使うなぁ
時間を扱うならDouble型使うなぁ
56デフォルトの名無しさん (ワッチョイ 924f-tqDZ)
2021/03/26(金) 08:07:23.35ID:3Vso6amb0 >>52
シリアル値で日付までが整数部で時間から小数点になるから小数点扱える型なのにミリ秒が扱えないと言うのが
ちょっと引っ掛かったので調べてみたよ。
方式はセルにミリ秒まで表示出来るフォーマットを設定して(yyyy/mm/dd hh:mm:ss.000)
隣のセルにその値を代入する数式を書いて、数値で小数点16桁くらい表示するようなフォーマットを設定して、
またその隣にそのセルの値を代入してセルにミリ秒まで表示するフォーマットのセルを用意して
元の値が正しく表示されるか確認した。
で、VBAで最初のセルの値をDATE型の変数に入れてDouble型に変換したら、
キチンと2番目のセルと同じ頭になることが確認出来たので、DATE型はミリ秒まで持てることが分かった。
じゃ、何で丸められちゃうの?
と言うことになると思うけど、どうやらこういうことらしい。
https://support.microsoft.com/ja-jp/topic/excel-ワークシートのセルに-vba-の日付形式またはバリアント型の日付形式を割り当てようとすると-ミリ秒が最も近い秒に丸められます-4a0af2c5-78de-762f-6431-8669890f585b
シリアル値で日付までが整数部で時間から小数点になるから小数点扱える型なのにミリ秒が扱えないと言うのが
ちょっと引っ掛かったので調べてみたよ。
方式はセルにミリ秒まで表示出来るフォーマットを設定して(yyyy/mm/dd hh:mm:ss.000)
隣のセルにその値を代入する数式を書いて、数値で小数点16桁くらい表示するようなフォーマットを設定して、
またその隣にそのセルの値を代入してセルにミリ秒まで表示するフォーマットのセルを用意して
元の値が正しく表示されるか確認した。
で、VBAで最初のセルの値をDATE型の変数に入れてDouble型に変換したら、
キチンと2番目のセルと同じ頭になることが確認出来たので、DATE型はミリ秒まで持てることが分かった。
じゃ、何で丸められちゃうの?
と言うことになると思うけど、どうやらこういうことらしい。
https://support.microsoft.com/ja-jp/topic/excel-ワークシートのセルに-vba-の日付形式またはバリアント型の日付形式を割り当てようとすると-ミリ秒が最も近い秒に丸められます-4a0af2c5-78de-762f-6431-8669890f585b
57デフォルトの名無しさん (ワンミングク MM62-6iI7)
2021/03/26(金) 12:00:33.82ID:scqWQXi5M >>53-56
ありがとうございます
勉強中でVBAの動きを理解したいだけで、何がしたいという訳ではないです
調べてみましたが以下の理解で合っていますか?
・シリアル値はDouble型の情報
・日付(Date型)はシリアル値の表示形式を"yyyy/mm/dd h:mm:ss"に変更しているイメージ
内部ではミリ秒含むシリアル値を持っており、ミリ秒以下の情報が九められた訳ではない
・シリアル値とDate型はCDbl とCDateで相互変換可能。このときもミリ秒以下の情報は丸められない
・ミリ秒が丸められるのは、Date型をセルに=で代入したとき
これは、Date型の表示をセルにコピーしているため
・セルにDate型でなくシリアル値を代入することで回避できる
ありがとうございます
勉強中でVBAの動きを理解したいだけで、何がしたいという訳ではないです
調べてみましたが以下の理解で合っていますか?
・シリアル値はDouble型の情報
・日付(Date型)はシリアル値の表示形式を"yyyy/mm/dd h:mm:ss"に変更しているイメージ
内部ではミリ秒含むシリアル値を持っており、ミリ秒以下の情報が九められた訳ではない
・シリアル値とDate型はCDbl とCDateで相互変換可能。このときもミリ秒以下の情報は丸められない
・ミリ秒が丸められるのは、Date型をセルに=で代入したとき
これは、Date型の表示をセルにコピーしているため
・セルにDate型でなくシリアル値を代入することで回避できる
58デフォルトの名無しさん (ワッチョイ 5eda-bGNI)
2021/03/26(金) 12:08:12.92ID:RjaLBbvt0 (´-`).。oO(「丸める」をどう入力したら「九める」となるのだろう・・・知らんけど)
59デフォルトの名無しさん (ワッチョイ 924f-tqDZ)
2021/03/26(金) 12:44:01.98ID:3Vso6amb060デフォルトの名無しさん (ワッチョイ 8101-XUQ7)
2021/03/26(金) 16:10:18.31ID:xthmZvz4061デフォルトの名無しさん (ワッチョイ 655f-luGl)
2021/03/26(金) 17:55:08.09ID:YMBMwB0G062デフォルトの名無しさん (ワンミングク MM62-6iI7)
2021/03/26(金) 18:28:35.59ID:scqWQXi5M ありがとうございます
これ以上は突き詰めないようにします
ここまで解説してるサイトはほとんど見当たりませんでしたが、
Application.Waitの引数にVBAの関数を使うと何故精度が低くなるのか?など
ここまで理解して初めて分かることもあったので良かったです
ちなみに丸が九になったのはパソコンで打った文章をスマホで取り込んだからですね
これ以上は突き詰めないようにします
ここまで解説してるサイトはほとんど見当たりませんでしたが、
Application.Waitの引数にVBAの関数を使うと何故精度が低くなるのか?など
ここまで理解して初めて分かることもあったので良かったです
ちなみに丸が九になったのはパソコンで打った文章をスマホで取り込んだからですね
63デフォルトの名無しさん (ワッチョイ b18e-COrd)
2021/03/26(金) 20:17:02.94ID:9W175/Ms0 馬鹿は入力機器で漢字コードが決まると思っているのか
64デフォルトの名無しさん (ワッチョイ 655f-luGl)
2021/03/26(金) 20:24:40.81ID:YMBMwB0G0 漢字コードとは古臭いw
65デフォルトの名無しさん (ワッチョイ 655f-luGl)
2021/03/26(金) 20:27:23.31ID:YMBMwB0G0 JISコード時代の俗称だぞ。
66デフォルトの名無しさん (ワッチョイ b18e-COrd)
2021/03/26(金) 20:58:19.29ID:9W175/Ms0 JISとかEBCDICとか古いこと自慢か?
67デフォルトの名無しさん (ブーイモ MMa6-jVD9)
2021/03/26(金) 22:02:40.63ID:AwqZOL59M 5chはジジイの巣窟です
昔話に花が咲くのです
昔話に花が咲くのです
68デフォルトの名無しさん (ワッチョイ 655f-j37g)
2021/03/26(金) 23:45:57.50ID:YMBMwB0G0 漢字ROMの時代からやってきた過去の人
69デフォルトの名無しさん (ワッチョイ 8101-lcsw)
2021/03/27(土) 20:27:21.67ID:5nK2M5CU0 質問させてください
worksheetfunctionでsumifやcountifを使用する際の範囲指定はrange(cells(),cells ())と指定する方がいいのか、cells ().resize()と指定する方がいいのか、どっちでしょう?
皆さんはどっちを使用していますか?
worksheetfunctionでsumifやcountifを使用する際の範囲指定はrange(cells(),cells ())と指定する方がいいのか、cells ().resize()と指定する方がいいのか、どっちでしょう?
皆さんはどっちを使用していますか?
70デフォルトの名無しさん (ワイーワ2 FF1a-j37g)
2021/03/27(土) 21:10:41.58ID:/5jOHbkqF rangeは特殊だからはまりやすい。
71デフォルトの名無しさん (ワッチョイ 1242-lMfL)
2021/03/27(土) 21:23:53.88ID:+4xxppTF0 範囲をどうやって決めているかによる
72デフォルトの名無しさん (ワッチョイ 8101-lcsw)
2021/03/27(土) 21:28:05.27ID:5nK2M5CU0 一般的な場合として、例えば最大行までの範囲とした場合はどうでしょうか?
初心者なので、最近、resizeを学んだばっかりなのですが、resizeの方がすっきりしてるような気がするけど、rangeの方がパッと見、分かりやすいよなぁと思いまして
初心者なので、最近、resizeを学んだばっかりなのですが、resizeの方がすっきりしてるような気がするけど、rangeの方がパッと見、分かりやすいよなぁと思いまして
73デフォルトの名無しさん (ワッチョイ 655f-ow1w)
2021/03/27(土) 21:49:27.21ID:WrV3x1Cf0 たしかえくせるちゅんちゅんでそんな解説記事あったよ
おれは範囲指定だったらrangeかな
resizeは増やす値をちゃんと考慮しないと間違えやすいんだよな
おれは範囲指定だったらrangeかな
resizeは増やす値をちゃんと考慮しないと間違えやすいんだよな
74デフォルトの名無しさん (ドコグロ MM9a-eYIm)
2021/03/27(土) 22:29:55.09ID:kX/HYgzKM75デフォルトの名無しさん (アウアウウー Sacd-GqLf)
2021/03/27(土) 22:36:49.88ID:DIdh8j19a テーブルにすればRangeでCellsを囲う必要がなくなるから、まずテーブルにできるかから考えてみれば
76デフォルトの名無しさん (ワッチョイ b163-VcSF)
2021/03/28(日) 12:09:35.83ID:gO7qo7Yf0 現在6秒に1回実行するマクロを組んでいるのですが、
複数のエクセルファイルを開いてそのマクロを実行すると、
マクロを実行しているファイルとは別のエクセルファイルを
マウス等で触ってアクティブにすると、関係のないそのエクセルファイルで
そのマクロが実行されて、肝心のマクロが肝心のファイルで実行されず、
エラーになるという現象で悩まされています。
例えば、ファイル名「A」、ファイル名「B」のエクセルファイルがあり、
ファイル名「A」の中にマクロでセルF1を6秒間隔で選択するコードがあると、
6秒間隔で更新している時にファイル名「B」を触ると(アクティブになる)、
ファイル名「B」のセルF1を選択してしまうのです。本来はファイル名「A」
で組んでいえるのでファイル名Aで実行されなければいけないのに。。。
ファイル名、シート名を指定して他のファイルでは実行できないようにコードを
入れてみたのですが治りません。どうすればよいのでしょうか?
ご教授お願いします。
複数のエクセルファイルを開いてそのマクロを実行すると、
マクロを実行しているファイルとは別のエクセルファイルを
マウス等で触ってアクティブにすると、関係のないそのエクセルファイルで
そのマクロが実行されて、肝心のマクロが肝心のファイルで実行されず、
エラーになるという現象で悩まされています。
例えば、ファイル名「A」、ファイル名「B」のエクセルファイルがあり、
ファイル名「A」の中にマクロでセルF1を6秒間隔で選択するコードがあると、
6秒間隔で更新している時にファイル名「B」を触ると(アクティブになる)、
ファイル名「B」のセルF1を選択してしまうのです。本来はファイル名「A」
で組んでいえるのでファイル名Aで実行されなければいけないのに。。。
ファイル名、シート名を指定して他のファイルでは実行できないようにコードを
入れてみたのですが治りません。どうすればよいのでしょうか?
ご教授お願いします。
77デフォルトの名無しさん (JP 0Hd5-UUyU)
2021/03/28(日) 12:41:13.75ID:SibCEmYdH >>76
コードの中の全部のRangeやCellsにもブック名とシート名を書いてある?
コードの中の全部のRangeやCellsにもブック名とシート名を書いてある?
78デフォルトの名無しさん (ブーイモ MMd5-krmx)
2021/03/28(日) 12:53:44.04ID:vqLmoR8/M 面倒なのは分かるが意図しない動作をする時はF8で1ステップずつ挙動を確認したりデスクに適当な人形をおいてコードを1行1行何をしている行なのかを人形に対して声に出しながら説明すると原因を突き止めやすいぞ
79デフォルトの名無しさん (ワッチョイ 5eda-bGNI)
2021/03/28(日) 13:27:37.72ID:slfnYujm0 当該ブックのアクティブ化とCallだけでやろうとしている?
これかしら?
Application.Run ‘パス+ブック名’!マクロ名
https://excelwork.info/excel/runmethod/
これかしら?
Application.Run ‘パス+ブック名’!マクロ名
https://excelwork.info/excel/runmethod/
80デフォルトの名無しさん (アウアウウー Sacd-N2Bw)
2021/03/28(日) 14:55:28.65ID:0AXzz3HSa thisworkbookでいいんじゃね
81デフォルトの名無しさん (ワッチョイ 0901-bb0G)
2021/03/28(日) 15:28:42.70ID:58jRB2Jo0 >>76
これだとアクティブなシートの[A1]に入力されます
Range("A1")=1
これだと指定したファイルの指定したシートの[A1]に入力されます
Workbooks("Book1").Worksheets("Sheet1").Range("A1") = 1
これだとアクティブなシートの[A1]に入力されます
Range("A1")=1
これだと指定したファイルの指定したシートの[A1]に入力されます
Workbooks("Book1").Worksheets("Sheet1").Range("A1") = 1
82デフォルトの名無しさん (ササクッテロル Sp79-tqDZ)
2021/03/28(日) 17:37:33.16ID:NPcBjbDnp まーおそらく値の設定時に
ちゃんとどのブック、どのシートって
設定されていないんだろうけど
もっと気になるのは6秒というスパンの中で
処理が6秒を間に合わなかったらどうするのか
ちゃんと考えて作っていのかってことかな
大きなお世話かも知れんけど
ちゃんとどのブック、どのシートって
設定されていないんだろうけど
もっと気になるのは6秒というスパンの中で
処理が6秒を間に合わなかったらどうするのか
ちゃんと考えて作っていのかってことかな
大きなお世話かも知れんけど
83デフォルトの名無しさん (ワッチョイ d2e6-WhAp)
2021/03/28(日) 18:29:23.67ID:vpNC6cf/0 セルの編集は6秒あれば楽勝です
84デフォルトの名無しさん (スップ Sd12-wiwq)
2021/03/28(日) 20:03:24.72ID:5/aHi+ebd >>40
自分が書き込んだかと思ったわw
自分が書き込んだかと思ったわw
85デフォルトの名無しさん (ワッチョイ a2bd-9S/5)
2021/03/28(日) 20:31:26.17ID:y1jMexrp0 UIAutomationでInvokeをするVBAマクロをタスクスケジューラで
日次・定時に起動しているのですがロック画面ではInvokeが実行されません
解決策をご存知でしたらご教示お願いします
日次・定時に起動しているのですがロック画面ではInvokeが実行されません
解決策をご存知でしたらご教示お願いします
86デフォルトの名無しさん (ワッチョイ 9eda-UUyU)
2021/03/28(日) 21:54:46.91ID:FtDhz91V0 ロック画面にしない
87デフォルトの名無しさん (アウアウウー Sacd-N2Bw)
2021/03/29(月) 18:09:13.47ID:RBGHkQmra もはやexcelの問題じゃねーし
88デフォルトの名無しさん (アウアウウー Sacd-ihLa)
2021/03/29(月) 19:13:47.90ID:QhuH86uEa なんでFINDで探せないんだろ
とおもったら
改行コードがはいっていたでござる
やれやれ
とおもったら
改行コードがはいっていたでござる
やれやれ
89デフォルトの名無しさん (ワッチョイ 62ee-1mGO)
2021/03/30(火) 17:58:10.32ID:0EHjDb6N0 質問です
前はExcel2010の時はレジストリを維持って、VBAファイルだけはインスタンス起動が出来るようにするとか可能でしたが
2019にするとインスタンス起動ができなくなってました。
.xlsmファイルだけインスタンス起動するとか方法はないでしょうか
前はExcel2010の時はレジストリを維持って、VBAファイルだけはインスタンス起動が出来るようにするとか可能でしたが
2019にするとインスタンス起動ができなくなってました。
.xlsmファイルだけインスタンス起動するとか方法はないでしょうか
90デフォルトの名無しさん (ワッチョイ 9eda-UUyU)
2021/03/31(水) 04:17:21.25ID:1Kn3VVGI0 右クリックして[新規] じゃだめなのか?
9176です。 (ワッチョイ b163-VcSF)
2021/03/31(水) 18:32:23.42ID:Evr26ox50 回答くださった皆さん本当に有難うございます。
これから回答いただいた対処法を全て1個1個試していこうと思います。
なお6秒に一回とは、エクセルのセルに株価をリアルタイムで
反映するソフトがあるのですが、それで株のアラート機能を
VBAで自作で作っているので必要なのです。
ではでは。
これから回答いただいた対処法を全て1個1個試していこうと思います。
なお6秒に一回とは、エクセルのセルに株価をリアルタイムで
反映するソフトがあるのですが、それで株のアラート機能を
VBAで自作で作っているので必要なのです。
ではでは。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】日本代表MF 中村敬斗 ボリビア戦のスーパーゴールに「惚れるわ」「痺れる程のゴールこれでご飯何杯いけるのよ」 [阿弥陀ヶ峰★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
- 自閉症が「んなっしょい」と連呼するお🏡
- 日本人の海外旅行したきのマナーよくなったのはいつから
- へそグリグリ
- 結婚しないやつは異性は嫌いなの?
