!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:jtngtgXU040デフォルトの名無しさん (ワッチョイ 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で自作で作っているので必要なのです。
ではでは。
2021/03/31(水) 20:42:46.87
sheet1のA1には
https://www.jma.go.jp/英数字
A3からA10000には、それぞれ異なるURLが記載されています
B1には
https://maps.gsi.go.jp/index_m.htmlhttps://www.mlit.go.jp/river/toukei_chousa/kasen/jiten/nihon_kawa/0305_edogawa/0305_edogawa_00.htmlhttps://www.jice.or.jp/knowledge/japan/commentary03
みたいなURLが繋がっている文字列があります
B2からB10000には、上の様なURLが繋がっている文字列があります
A1からA3は
https://www.jma.go.jp/英数字
B1
https://maps.gsi.go.jp/index_m.html
B2
https://www.mlit.go.jp/river/toukei_chousa/kasen/jiten/nihon_kawa/0305_edogawa/0305_edogawa_00.html
B3
https://www.jice.or.jp/knowledge/japan/commentary03
みたいにB列にあるセル内を分解して、分解した分だけA列にA1の文字列を補う処理
以降B10000までを処理して
sheet2に記載したいのですが、どのようにすればよいでしょうか?
https://www.jma.go.jp/英数字
A3からA10000には、それぞれ異なるURLが記載されています
B1には
https://maps.gsi.go.jp/index_m.htmlhttps://www.mlit.go.jp/river/toukei_chousa/kasen/jiten/nihon_kawa/0305_edogawa/0305_edogawa_00.htmlhttps://www.jice.or.jp/knowledge/japan/commentary03
みたいなURLが繋がっている文字列があります
B2からB10000には、上の様なURLが繋がっている文字列があります
A1からA3は
https://www.jma.go.jp/英数字
B1
https://maps.gsi.go.jp/index_m.html
B2
https://www.mlit.go.jp/river/toukei_chousa/kasen/jiten/nihon_kawa/0305_edogawa/0305_edogawa_00.html
B3
https://www.jice.or.jp/knowledge/japan/commentary03
みたいにB列にあるセル内を分解して、分解した分だけA列にA1の文字列を補う処理
以降B10000までを処理して
sheet2に記載したいのですが、どのようにすればよいでしょうか?
93デフォルトの名無しさん (ワッチョイ 9279-LIGC)
2021/03/31(水) 22:33:41.42ID:GYCr8oLd0 何言ってるのか判らんが
好きなようにやればいいよ
好きなようにやればいいよ
94デフォルトの名無しさん (ワッチョイ 655f-j37g)
2021/04/01(木) 00:43:47.27ID:Qm9pGYRd095デフォルトの名無しさん (ワッチョイ b163-VcSF)
2021/04/01(木) 02:05:44.32ID:GioFRFH3096デフォルトの名無しさん (ワッチョイ 655f-j37g)
2021/04/01(木) 03:02:30.23ID:Qm9pGYRd0 変な外国人が作ったんだろうなあ
97デフォルトの名無しさん (スフッ Sdb2-UUyU)
2021/04/01(木) 09:31:40.60ID:JyQIT704d 「珍味」ってそういう使い方する言葉だっけ
98デフォルトの名無しさん (アウアウウー Sacd-GqLf)
2021/04/01(木) 10:40:32.36ID:Jj+/G5yda たぶん珍妙
99デフォルトの名無しさん (スフッ Sdb2-pdRJ)
2021/04/01(木) 10:48:06.97ID:jNbL4ETRd ワークシートの一部を画像として保存する方法にChartObjectsのExportメソッドがあります
が、罫線が一部消えてしまったりフォントが潰れたりして、画質が悪いのが気に入りません
もっと高画質で範囲指定してスクショを保存する方法はないでしょうか?
が、罫線が一部消えてしまったりフォントが潰れたりして、画質が悪いのが気に入りません
もっと高画質で範囲指定してスクショを保存する方法はないでしょうか?
100デフォルトの名無しさん (ワッチョイ 6963-VcSF)
2021/04/01(木) 11:51:22.66ID:tUMm1OA70 >>99
クリップボードを手作業で切り取る際、エクセルの倍率
(Ctrl+マウススクロールで変えれるあれ)を100%よりも大きい高倍率で
切り取った方が画質が良い。
従って、その画像を取得するマクロの直前に、
エクセルの画面の大きさを変えれるコードがあるので、
それを直前に入れ、それを切り取れば恐らく高画質のが出来るんじゃないかな。
最後は勿論ばい倍率をもとに戻すマクロを入れれば良いと思う。
クリップボードを手作業で切り取る際、エクセルの倍率
(Ctrl+マウススクロールで変えれるあれ)を100%よりも大きい高倍率で
切り取った方が画質が良い。
従って、その画像を取得するマクロの直前に、
エクセルの画面の大きさを変えれるコードがあるので、
それを直前に入れ、それを切り取れば恐らく高画質のが出来るんじゃないかな。
最後は勿論ばい倍率をもとに戻すマクロを入れれば良いと思う。
101デフォルトの名無しさん (ワッチョイ 62ee-Bi/r)
2021/04/01(木) 12:01:45.09ID:fy6TS88x0 >>90
インスタンス起動ではないですよね
インスタンス起動ではないですよね
102デフォルトの名無しさん (ワッチョイ b12c-NN47)
2021/04/01(木) 15:56:27.00ID:yB6nLlLi0 >>92
Ruby で作った。
正規表現の否定先読みなどを使えば、もっとスマートに書けるかも
# ? は、直前のパターンの0〜1回の繰り返し。「https?」は、「http|https」と同じ意味
re = %r!(https?://)! #=> https?:\/\/
input_str = %w(https://a/b.html http://c https://x/y).join
#=> "https://a/b.htmlhttp://chttps://x/y"
pos = input_str.size # 文字列の末尾の位置
results = [ ]
# 文字列の末尾から、一致させていく
while pos = input_str.rindex( re, pos )
# 一致した位置から末尾までを削除して、それを配列の先頭に追加していく
results.unshift input_str.slice!( pos..-1 )
end
p results #=> ["https://a/b.html", "http://c", "https://x/y"]
Ruby で作った。
正規表現の否定先読みなどを使えば、もっとスマートに書けるかも
# ? は、直前のパターンの0〜1回の繰り返し。「https?」は、「http|https」と同じ意味
re = %r!(https?://)! #=> https?:\/\/
input_str = %w(https://a/b.html http://c https://x/y).join
#=> "https://a/b.htmlhttp://chttps://x/y"
pos = input_str.size # 文字列の末尾の位置
results = [ ]
# 文字列の末尾から、一致させていく
while pos = input_str.rindex( re, pos )
# 一致した位置から末尾までを削除して、それを配列の先頭に追加していく
results.unshift input_str.slice!( pos..-1 )
end
p results #=> ["https://a/b.html", "http://c", "https://x/y"]
103102 (ワッチョイ b12c-NN47)
2021/04/01(木) 16:01:13.59ID:yB6nLlLi0104デフォルトの名無しさん (ワッチョイ 698f-UUyU)
2021/04/01(木) 16:53:17.71ID:7y1pTd6e0 >>94
オプションのスマイルカーブをリアルタイムに描画するエクセルソフトとかもあるよ。
オプションのスマイルカーブをリアルタイムに描画するエクセルソフトとかもあるよ。
105デフォルトの名無しさん (ワイーワ2 FF1a-j37g)
2021/04/01(木) 17:08:13.22ID:jznaQuthF 外部からローカルのファイルを更新するなんてマルウェアみたいだな。
106デフォルトの名無しさん (ワッチョイ b65c-jyiE)
2021/04/01(木) 21:32:16.81ID:5T6IIfi20 >>95
配当なんてせいぜい数%
そこから税金2割引かれる
値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない
つまり税金を考慮した期待値はマイナス
配当なんてせいぜい数%
そこから税金2割引かれる
値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない
つまり税金を考慮した期待値はマイナス
107デフォルトの名無しさん (ワッチョイ b12c-NN47)
2021/04/01(木) 23:13:35.12ID:yB6nLlLi0 >損しても2割補填してもらえるなんてことはない
補填してもらえる。
何年か損失を繰り越ししていれば、儲かった時に相殺される
長年、銀行が税金を払わないのは繰越損失があるので、
その後、利益が出ても相殺されるから
補填してもらえる。
何年か損失を繰り越ししていれば、儲かった時に相殺される
長年、銀行が税金を払わないのは繰越損失があるので、
その後、利益が出ても相殺されるから
108デフォルトの名無しさん (ワッチョイ e3f0-+VUH)
2021/04/02(金) 20:32:20.64ID:OjzTopDr0109デフォルトの名無しさん (アウアウウー Sae9-IEtB)
2021/04/03(土) 10:18:57.57ID:0vCxCYiYa 最近のはinternetexploreを許否するwebがあるからこまる
スマホならともかくビジネスではまだ主流なのに
スマホならともかくビジネスではまだ主流なのに
110デフォルトの名無しさん (スフッ Sd43-0pr0)
2021/04/03(土) 10:25:49.87ID:RckTLwqyd さすがワッチョイにIEを出す男は言うことが違う
111デフォルトの名無しさん (ワントンキン MMa3-7UwS)
2021/04/03(土) 10:59:03.48ID:D2e+M4g2M Web開発でIE対応が要件にないときにはむしろ意図的にIEで動かないようにするわ
勝手にIEで使われて文句言われるの最高にウザい
勝手にIEで使われて文句言われるの最高にウザい
112デフォルトの名無しさん (テテンテンテン MM4b-0Ghs)
2021/04/03(土) 13:29:03.89ID:XPTw6Pj4M >>33
自己レスだがわかったわ
WEBクエリでWEB内容をシートに書き出す
その中から出来高とかのワードをfindで探して
そのワードのn行後を取ってくる
みたいな動作をしてるんだけど、
ヤフーファイナンスの仕様が変わって
n行後の場所が変更になってた
ETFだけは従来の場所だから
上記結果がゼロならば違う場所を
取ってくるようにした
コピペプログラマだから
今回findとかOffsetを強制的に
学ばされて勉強になった
自己レスだがわかったわ
WEBクエリでWEB内容をシートに書き出す
その中から出来高とかのワードをfindで探して
そのワードのn行後を取ってくる
みたいな動作をしてるんだけど、
ヤフーファイナンスの仕様が変わって
n行後の場所が変更になってた
ETFだけは従来の場所だから
上記結果がゼロならば違う場所を
取ってくるようにした
コピペプログラマだから
今回findとかOffsetを強制的に
学ばされて勉強になった
113デフォルトの名無しさん (ファミワイ FF79-IEtB)
2021/04/03(土) 13:43:31.82ID:LoNYZ+kpF114デフォルトの名無しさん (ワッチョイ 1b09-vnSj)
2021/04/04(日) 02:10:27.86ID:7SFCjwlv0 ListViewのすべての項目を一発で削除する方法はありませんか?
ListBoxならClearメソッドが使えるようなのですが
ListBoxならClearメソッドが使えるようなのですが
115デフォルトの名無しさん (ブーイモ MMa9-0pr0)
2021/04/04(日) 03:01:59.01ID:OlWsfN+XM >>114
ListView.ListItems.Clear
ListView.ListItems.Clear
116デフォルトの名無しさん (ワッチョイ b501-Yokr)
2021/04/04(日) 04:07:16.17ID:hsI5tKvB0 別ブックから別ブックへ値を持ってきたいときって、コピーか配列使うしかないですか?
コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?
コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?
117デフォルトの名無しさん (アウアウウー Sae9-IEtB)
2021/04/04(日) 06:20:04.03ID:5jDGrLPha コピーでいいやん
118デフォルトの名無しさん (テテンテンテン MM4b-9RaQ)
2021/04/04(日) 13:08:15.45ID:X/c7fPAEM119デフォルトの名無しさん (ワッチョイ 1b09-vnSj)
2021/04/04(日) 13:44:02.06ID:7SFCjwlv0 >>115
ありがとうございます!うまくいきました
すみませんがListViewについてもう一つ教えていただけないでしょうか
MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています
リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか
ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます
ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています
ありがとうございます!うまくいきました
すみませんがListViewについてもう一つ教えていただけないでしょうか
MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています
リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか
ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます
ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています
120デフォルトの名無しさん (ワッチョイ e33d-K4o7)
2021/04/04(日) 17:46:13.14ID:JgvM3WMx0 >>116
コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる
コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる
121デフォルトの名無しさん (ワッチョイ b501-Yokr)
2021/04/04(日) 18:49:59.93ID:hsI5tKvB0122デフォルトの名無しさん (ワッチョイ e336-Yl66)
2021/04/05(月) 04:34:52.29ID:3N8BM4zS0 セルには0.9って入力してあるのに
VBAのcellsでそれを取得すると1と認識されるんですが
勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?
VBAのcellsでそれを取得すると1と認識されるんですが
勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?
123デフォルトの名無しさん (ワッチョイ 23ad-q0SB)
2021/04/05(月) 07:04:34.80ID:FxhyQ6l10 Currency型の変数に代入する
124デフォルトの名無しさん (ワッチョイ 234f-bYzF)
2021/04/05(月) 07:43:12.07ID:CnxjloBy0 >>123
そだね
ただCurrency型は小数点4桁までしか扱えないから
上記みたいに小数点1桁だったらいいけど
5桁以上扱ったり掛けたり割ったりする場合はDoubleの方がいいかな
ただ、Double型の場合は
浮動小数点あつかいでIEEE754規格だから
変に丸められちゃうことがあるんでかけ算割り算行う時は
一度整数にして計算してやる必要があるけど
まぁ使い所でどの型使うのか分けて使うのがいいかもね
そだね
ただCurrency型は小数点4桁までしか扱えないから
上記みたいに小数点1桁だったらいいけど
5桁以上扱ったり掛けたり割ったりする場合はDoubleの方がいいかな
ただ、Double型の場合は
浮動小数点あつかいでIEEE754規格だから
変に丸められちゃうことがあるんでかけ算割り算行う時は
一度整数にして計算してやる必要があるけど
まぁ使い所でどの型使うのか分けて使うのがいいかもね
125デフォルトの名無しさん (ワッチョイ e336-Yl66)
2021/04/05(月) 12:36:23.48ID:3N8BM4zS0126デフォルトの名無しさん (ワッチョイ cbda-0pr0)
2021/04/05(月) 17:42:39.68ID:GNHugBRe0 >>122
0.9の小数点以下を切り捨てたら 0 じゃね
0.9の小数点以下を切り捨てたら 0 じゃね
127デフォルトの名無しさん (アウアウウー Sae9-K4o7)
2021/04/05(月) 18:04:06.91ID:34gLfvfqa 別にInteger使う理由もないしlongにしちゃえばとも思う
128デフォルトの名無しさん (ワッチョイ cbda-Yl66)
2021/04/05(月) 19:09:20.57ID:IFZcDQ1J0 >>126
たしかに
たしかに
129デフォルトの名無しさん (アウアウウー Sae9-IEtB)
2021/04/06(火) 06:08:10.23ID:KMOOpCjWa 型を指定すると遅くなるから
できるだけ指定なしがよいよ
マクロらしさを生かそう
できるだけ指定なしがよいよ
マクロらしさを生かそう
130デフォルトの名無しさん (ワッチョイ e33d-K4o7)
2021/04/06(火) 07:02:52.46ID:Au4GybQm0 >>129
メンテが遅くなるからだめ
メンテが遅くなるからだめ
131デフォルトの名無しさん (ワッチョイ 234f-bYzF)
2021/04/06(火) 10:21:14.29ID:e+L9SfjT0 >>129
おいおいw
いくら質問スレで初心者だらけだからって
適当なことを教えてはいけない
指定しなかった型には自動的にVariant型が割り当てられて
本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる
VBAは比較的型の扱いが雑でも何とかなる方ではあるが
頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい
おいおいw
いくら質問スレで初心者だらけだからって
適当なことを教えてはいけない
指定しなかった型には自動的にVariant型が割り当てられて
本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる
VBAは比較的型の扱いが雑でも何とかなる方ではあるが
頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい
132デフォルトの名無しさん (ワッチョイ 1dcc-kjVL)
2021/04/06(火) 11:09:39.71ID:jDDsYkyr0 複数の多次元配列をプロシージャに参照渡しするときはどう書けばいいですか
こう書くとスルーされます。
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant)
・・・略
Call SheetCreate(ara(),arb(),arc())
End Sub
Sub SheetCreate(ByRef ara As Variant, ByRef arb As Variant, ByRef As arc As Variant)
・・・略
End Sub
こう書くとスルーされます。
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant)
・・・略
Call SheetCreate(ara(),arb(),arc())
End Sub
Sub SheetCreate(ByRef ara As Variant, ByRef arb As Variant, ByRef As arc As Variant)
・・・略
End Sub
133デフォルトの名無しさん (ワッチョイ 234f-bYzF)
2021/04/06(火) 12:45:54.77ID:e+L9SfjT0 >>132
うん、まあ
引数の型をVariantにしているからでしょうなぁ
何故Variantにすると値渡しになるのかは分からんけど
ちゃんと変数宣言のところで
StringとかIntegerとかの配列型宣言をして
呼び出される関数の引数にも
それに見合った型にすれば参照渡しされるんじゃない?
試してみて
うん、まあ
引数の型をVariantにしているからでしょうなぁ
何故Variantにすると値渡しになるのかは分からんけど
ちゃんと変数宣言のところで
StringとかIntegerとかの配列型宣言をして
呼び出される関数の引数にも
それに見合った型にすれば参照渡しされるんじゃない?
試してみて
134132 (ワッチョイ 1dcc-kjVL)
2021/04/06(火) 14:36:15.96ID:jDDsYkyr0 >133
知らなかったです。ありがとうございます
知らなかったです。ありがとうございます
135デフォルトの名無しさん (テテンテンテン MM4b-/elG)
2021/04/06(火) 14:39:05.93ID:7PISA/BhM >>132
普通に
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant
・・・略
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ara As Variant, arb As Variant, arc As Variant)
・・・略
End Sub
って書けばいいだけだと思う
普通に
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant
・・・略
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ara As Variant, arb As Variant, arc As Variant)
・・・略
End Sub
って書けばいいだけだと思う
136132 (ワッチョイ 1dcc-kjVL)
2021/04/06(火) 19:30:17.02ID:jDDsYkyr0 >>135
最初はそれでやっていたのですが、同じくスルーされてました
このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、
サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。
最初はそれでやっていたのですが、同じくスルーされてました
このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、
サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。
137デフォルトの名無しさん (スップ Sd43-0pr0)
2021/04/06(火) 19:51:59.72ID:JmeclF78d ブレークポイントで止まらないのはおかしい
根本的に別のとこで間違ってる
根本的に別のとこで間違ってる
138デフォルトの名無しさん (アウアウウー Sae9-IEtB)
2021/04/06(火) 20:36:50.07ID:DMwNdxSba うむ、おかしい
139デフォルトの名無しさん (ワッチョイ 5d49-kSr3)
2021/04/06(火) 22:23:14.18ID:kxv5hjcy0 Sub Smple()
Dim ara(2, 4) As Variant, arb(85, 3) As Variant, arc As Variant
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ByRef ara() As Variant, ByRef arb() As Variant, ByRef arc As Variant)
End Sub
Dim ara(2, 4) As Variant, arb(85, 3) As Variant, arc As Variant
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ByRef ara() As Variant, ByRef arb() As Variant, ByRef arc As Variant)
End Sub
140デフォルトの名無しさん (ワッチョイ e5da-jIYQ)
2021/04/07(水) 19:30:33.27ID:aMJgToSe0 全部省略すれば勝手にByRefだと思ってけど違うの?
SheetCreate ara, arb, arc
Sub SheetCreate(ara, arb, arc)
End Sub
SheetCreate ara, arb, arc
Sub SheetCreate(ara, arb, arc)
End Sub
■ このスレッドは過去ログ倉庫に格納されています
