[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/04 15:55 / Filesize : 295 KB / Number-of Response : 1008
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part70



1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net]
!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

40 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 01:08:37.06 ID:QAr0K9ya0.net]
いきなりアホになってコード組むのが劇遅くなりました。
きれいなコードを書こうと思ったんです。

41 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 04:40:02.78 ID:d+5Eu7Qca.net]
思っただけにしとけ

42 名前:32 mailto:sage [2021/03/25(木) 10:21:24.54 ID:Btw5OylJ0.net]
ありがとうございました。
自分で注意深くやるしかないんですね

実行中のfunction(やsub)名を取得することは可能でしょうか?
やりたいことはエラー処理時にその名称を表示したいのですが
べた書きするしかないですかね


Public Function test() As String

On Error testErr

testErrr:
MsgBox "testErr" & vbCrLf & "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description, vbExclamation
End Function

43 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 10:44:00.77 ID:kL+lpreE0.net]
あくまで個人的だが

MsgBox "○○で異常が発生しました." & vbCrLf & "Err:" & Err.Number & " " & Err.Description, vbExclamation, "Function test"

44 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 12:19:36.16 ID:v0lS7PpFM.net]
個人的には、だけど最終的にはエラー停止が発生せずイレギュラーの場合は自らメッセージを出して処理を終了するってするのが望ましいんじゃないかなぁ
動作確認で何実行してるか知りたいだけなら各プロシージャの頭にDebug.Printでプロシージャ名吐き出しておけばどこで止まったかが分かりやすい
まぁDebug.Printって軽くはないから少し大きめのプログラムだと動作確認中は時間かかる感じになっちゃうだろうけど

45 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 13:26:17.29 ID:kL+lpreE0.net]
確かにそうだ、異常が出ないで済むように入力データのチェックとか
ファイルの有無とかを先に確認すればエラーなんか滅多に起きないからな

46 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 13:41:18.71 ID:Btw5OylJ0.net]
>>45
勿論そういうチェックは入れていますよ

47 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 14:16:03.41 ID:NGSCZFfJH.net]
ちゃんとチェックしてればOn Errorの出番なんか滅多にないはずだけど
複数の関数でエラーが出るなんて、あきらかに設計がおかしい

48 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 20:31:33.14 ID:hvCMihey0.net]
>>42
そうだね。VBAと言うかVB6系のは基本ベタ書きするしかない。
例外としてクラシックASPでVBS走らせたときはエラー行を表示させることが出来る。
VB.Netになるとその辺の情報は細やかに取得出来る。

VBAはベースが古い言語だから仕方がない。



49 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 20:56:22.97 ID:hvCMihey0.net]
>>47
別に設計がおかしいと言うことはないよ。
これはVBAに限らず論理エラーで把握しきれないものは実行時エラーとして捕まえる仕組みは当然のように設定する場合がある。

例えばDBに繋ぎに行って繋がったけどその後で何らかしらの外部的要因で切断された場合など、
実行時エラーが発生するのでその場合は何度か再接続を試みてダメだったら初めてエラーとしてポップアップするとか。

その場合、当然データ復旧させるためにもどこでどんなことやろうとして落ちたのかの情報は重要になってくることが多い。
その他にも概ね実行時エラーは予期せず落ちるものの方が多いので
むしろ状況を把握するためにも細かい情報が必要になることの方が多いよ。

50 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 21:30:34.23 ID:NGSCZFfJH.net]
それってVBAでやるようなことか?
例外処理が必要とわかってるなら.netで書いてTry Catchを使うべきだと思うが

51 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 22:07:43.24 ID:hvCMihey0.net]
>>50
.Netの環境が選択出来る状況ならそれでもいいんじゃないの?
.NetならException継承して好きにエラー設定すればいい。
けどここはあくまでEXCEL VBAのスレだからその話は置いておくよ。

後、VBAでやることかどうかと言うのはあくまで俺はだけど正直あまり選択基準にないな。
第一に要件を満たしているか、次に操作や保守がし易いかかな。まぁ、納期も重要な要素にはなるけど。

だからもし後で保守するのが楽になるなら
場合によってはエラーメッセージ出しておしまいにすることもあるだろうけど
場合によってはエラーハンドリング用のクラス作ったり、
論理エラーもRaiseして実行時エラーのように処理して一元管理したり、
後始末処理をコールバックで移譲して処理したりすることも視野に入れるよ。

52 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 01:12:09.52 ID:ZoYVceoP0.net]
Date型はミリ秒を持てないのでしょうか?
エクセルシートでミリ秒まで表示できている時刻があって、そのシリアル値をVBAのDate型変数に代入するとミリ秒以下が丸められてしまいます

53 名前:デフォルトの名無しさん [2021/03/26(金) 01:52:58.20 ID:YMBMwB0G0.net]
>>52
時分秒までです。

54 名前:デフォルトの名無しさん [2021/03/26(金) 01:56:39.74 ID:YMBMwB0G0.net]
>>52
Date型に入れて何がしたかったのか?

55 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 02:03:12.37 ID:NYhr3fTi0.net]
日付を扱うならDate型使うけど
時間を扱うならDouble型使うなぁ

56 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 08:07:23.35 ID:3Vso6amb0.net]
>>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

57 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 12:00:33.82 ID:scqWQXi5M.net]
>>53-56
ありがとうございます
勉強中でVBAの動きを理解したいだけで、何がしたいという訳ではないです

調べてみましたが以下の理解で合っていますか?
・シリアル値はDouble型の情報
・日付(Date型)はシリアル値の表示形式を"yyyy/mm/dd h:mm:ss"に変更しているイメージ
 内部ではミリ秒含むシリアル値を持っており、ミリ秒以下の情報が九められた訳ではない
・シリアル値とDate型はCDbl とCDateで相互変換可能。このときもミリ秒以下の情報は丸められない

・ミリ秒が丸められるのは、Date型をセルに=で代入したとき
 これは、Date型の表示をセルにコピーしているため
・セルにDate型でなくシリアル値を代入することで回避できる

58 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 12:08:12.92 ID:RjaLBbvt0.net]
(´-`).。oO(「丸める」をどう入力したら「九める」となるのだろう・・・知らんけど)



59 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 12:44:01.98 ID:3Vso6amb0.net]
>>57
本当の意味合いではかなり違う気もするけど
イメージ的にはそんな感じかな

60 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 16:10:18.31 ID:xthmZvz40.net]
>>58
手書き入力なんじゃないの
知らんけど

61 名前:デフォルトの名無しさん [2021/03/26(金) 17:55:08.09 ID:YMBMwB0G0.net]
>>57
Excelの内部データ形式は突き詰めない方がいいよ。

それにセルの書式の組み合わせもあるから、初心者は気をつけてね。

62 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 18:28:35.59 ID:scqWQXi5M.net]
ありがとうございます
これ以上は突き詰めないようにします
ここまで解説してるサイトはほとんど見当たりませんでしたが、
Application.Waitの引数にVBAの関数を使うと何故精度が低くなるのか?など
ここまで理解して初めて分かることもあったので良かったです

ちなみに丸が九になったのはパソコンで打った文章をスマホで取り込んだからですね

63 名前:デフォルトの名無しさん [2021/03/26(金) 20:17:02.94 ID:9W175/Ms0.net]
馬鹿は入力機器で漢字コードが決まると思っているのか

64 名前:デフォルトの名無しさん [2021/03/26(金) 20:24:40.81 ID:YMBMwB0G0.net]
漢字コードとは古臭いw

65 名前:デフォルトの名無しさん [2021/03/26(金) 20:27:23.31 ID:YMBMwB0G0.net]
JISコード時代の俗称だぞ。

66 名前:デフォルトの名無しさん [2021/03/26(金) 20:58:19.29 ID:9W175/Ms0.net]
JISとかEBCDICとか古いこと自慢か?

67 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 22:02:40.63 ID:AwqZOL59M.net]
5chはジジイの巣窟です
昔話に花が咲くのです

68 名前:デフォルトの名無しさん [2021/03/26(金) 23:45:57.50 ID:YMBMwB0G0.net]
漢字ROMの時代からやってきた過去の人



69 名前:デフォルトの名無しさん mailto:sage [2021/03/27(土) 20:27:21.67 ID:5nK2M5CU0.net]
質問させてください
worksheetfunctionでsumifやcountifを使用する際の範囲指定はrange(cells(),cells ())と指定する方がいいのか、cells ().resize()と指定する方がいいのか、どっちでしょう?
皆さんはどっちを使用していますか?

70 名前:デフォルトの名無しさん [2021/03/27(土) 21:10:41.58 ID:/5jOHbkqF.net]
rangeは特殊だからはまりやすい。

71 名前:デフォルトの名無しさん mailto:sage [2021/03/27(土) 21:23:53.88 ID:+4xxppTF0.net]
範囲をどうやって決めているかによる

72 名前:デフォルトの名無しさん mailto:sage [2021/03/27(土) 21:28:05.27 ID:5nK2M5CU0.net]
一般的な場合として、例えば最大行までの範囲とした場合はどうでしょうか?
初心者なので、最近、resizeを学んだばっかりなのですが、resizeの方がすっきりしてるような気がするけど、rangeの方がパッと見、分かりやすいよなぁと思いまして

73 名前:デフォルトの名無しさん mailto:sage [2021/03/27(土) 21:49:27.21 ID:WrV3x1Cf0.net]
たしかえくせるちゅんちゅんでそんな解説記事あったよ
おれは範囲指定だったらrangeかな
resizeは増やす値をちゃんと考慮しないと間違えやすいんだよな

74 名前:デフォルトの名無しさん [2021/03/27(土) 22:29:55.09 ID:kX/HYgzKM.net]
>>72
その程度ならお好みでどうぞ
値貼り付けとかやる場合は、range(cells(),cells ())なんか使ってられないから、Set、Offset、Rresizeの組み合わせを使っているな

75 名前:デフォルトの名無しさん mailto:sage [2021/03/27(土) 22:36:49.88 ID:DIdh8j19a.net]
テーブルにすればRangeでCellsを囲う必要がなくなるから、まずテーブルにできるかから考えてみれば

76 名前:デフォルトの名無しさん [2021/03/28(日) 12:09:35.83 ID:gO7qo7Yf0.net]
現在6秒に1回実行するマクロを組んでいるのですが、
複数のエクセルファイルを開いてそのマクロを実行すると、
マクロを実行しているファイルとは別のエクセルファイルを
マウス等で触ってアクティブにすると、関係のないそのエクセルファイルで
そのマクロが実行されて、肝心のマクロが肝心のファイルで実行されず、
エラーになるという現象で悩まされています。
例えば、ファイル名「A」、ファイル名「B」のエクセルファイルがあり、
ファイル名「A」の中にマクロでセルF1を6秒間隔で選択するコードがあると、
6秒間隔で更新している時にファイル名「B」を触ると(アクティブになる)、
ファイル名「B」のセルF1を選択してしまうのです。本来はファイル名「A」
で組んでいえるのでファイル名Aで実行されなければいけないのに。。。
ファイル名、シート名を指定して他のファイルでは実行できないようにコードを
入れてみたのですが治りません。どうすればよいのでしょうか?
ご教授お願いします。

77 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 12:41:13.75 ID:SibCEmYdH.net]
>>76
コードの中の全部のRangeやCellsにもブック名とシート名を書いてある?

78 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 12:53:44.04 ID:vqLmoR8/M.net]
面倒なのは分かるが意図しない動作をする時はF8で1ステップずつ挙動を確認したりデスクに適当な人形をおいてコードを1行1行何をしている行なのかを人形に対して声に出しながら説明すると原因を突き止めやすいぞ



79 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 13:27:37.72 ID:slfnYujm0.net]
当該ブックのアクティブ化とCallだけでやろうとしている?

これかしら?
Application.Run ‘パス+ブック名’!マクロ名

https://excelwork.info/excel/runmethod/

80 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 14:55:28.65 ID:0AXzz3HSa.net]
thisworkbookでいいんじゃね

81 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 15:28:42.70 ID:58jRB2Jo0.net]
>>76
これだとアクティブなシートの[A1]に入力されます
Range("A1")=1

これだと指定したファイルの指定したシートの[A1]に入力されます
Workbooks("Book1").Worksheets("Sheet1").Range("A1") = 1

82 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 17:37:33.16 ID:NPcBjbDnp.net]
まーおそらく値の設定時に
ちゃんとどのブック、どのシートって
設定されていないんだろうけど
もっと気になるのは6秒というスパンの中で
処理が6秒を間に合わなかったらどうするのか
ちゃんと考えて作っていのかってことかな
大きなお世話かも知れんけど

83 名前:デフォルトの名無しさん [2021/03/28(日) 18:29:23.67 ID:vpNC6cf/0.net]
セルの編集は6秒あれば楽勝です

84 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 20:03:24.72 ID:5/aHi+ebd.net]
>>40
自分が書き込んだかと思ったわw

85 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 20:31:26.17 ID:y1jMexrp0.net]
UIAutomationでInvokeをするVBAマクロをタスクスケジューラで
日次・定時に起動しているのですがロック画面ではInvokeが実行されません

解決策をご存知でしたらご教示お願いします

86 名前:デフォルトの名無しさん mailto:sage [2021/03/28(日) 21:54:46.91 ID:FtDhz91V0.net]
ロック画面にしない

87 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 18:09:13.47 ID:RBGHkQmra.net]
もはやexcelの問題じゃねーし

88 名前:デフォルトの名無しさん mailto:sage [2021/03/29(月) 19:13:47.90 ID:QhuH86uEa.net]
なんでFINDで探せないんだろ
とおもったら
改行コードがはいっていたでござる

やれやれ



89 名前:デフォルトの名無しさん mailto:sage [2021/03/30(火) 17:58:10.32 ID:0EHjDb6N0.net]
質問です

前はExcel2010の時はレジストリを維持って、VBAファイルだけはインスタンス起動が出来るようにするとか可能でしたが
2019にするとインスタンス起動ができなくなってました。
.xlsmファイルだけインスタンス起動するとか方法はないでしょうか

90 名前:デフォルトの名無しさん mailto:sage [2021/03/31(水) 04:17:21.25 ID:1Kn3VVGI0.net]
右クリックして[新規] じゃだめなのか?

91 名前:76です。 [2021/03/31(水) 18:32:23.42 ID:Evr26ox50.net]
回答くださった皆さん本当に有難うございます。
これから回答いただいた対処法を全て1個1個試していこうと思います。
なお6秒に一回とは、エクセルのセルに株価をリアルタイムで
反映するソフトがあるのですが、それで株のアラート機能を
VBAで自作で作っているので必要なのです。
ではでは。

92 名前:デフォルトの名無しさん mailto:sage [2021/03/31(水) 20:42:46.87 .net]
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に記載したいのですが、どのようにすればよいでしょうか?

93 名前:デフォルトの名無しさん mailto:sage [2021/03/31(水) 22:33:41.42 ID:GYCr8oLd0.net]
何言ってるのか判らんが
好きなようにやればいいよ

94 名前:デフォルトの名無しさん [2021/04/01(木) 00:43:47.27 ID:Qm9pGYRd0.net]
>>91
「エクセルのセルに株価をリアルタイムで
反映するソフトがある」

こんな珍味なソフトウェアがあるのかw

95 名前:デフォルトの名無しさん [2021/04/01(木) 02:05:44.32 ID:GioFRFH30.net]
>>94
楽天RSS 岡三RSS。
因みに株は難しく甘い世界ではないので安易にやらないようにしましょう。
ほとんどの人が負けます。

96 名前:デフォルトの名無しさん [2021/04/01(木) 03:02:30.23 ID:Qm9pGYRd0.net]
変な外国人が作ったんだろうなあ

97 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 09:31:40.60 ID:JyQIT704d.net]
「珍味」ってそういう使い方する言葉だっけ

98 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 10:40:32.36 ID:Jj+/G5yda.net]
たぶん珍妙



99 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 10:48:06.97 ID:jNbL4ETRd.net]
ワークシートの一部を画像として保存する方法にChartObjectsのExportメソッドがあります
が、罫線が一部消えてしまったりフォントが潰れたりして、画質が悪いのが気に入りません
もっと高画質で範囲指定してスクショを保存する方法はないでしょうか?

100 名前:デフォルトの名無しさん [2021/04/01(木) 11:51:22.66 ID:tUMm1OA70.net]
>>99
クリップボードを手作業で切り取る際、エクセルの倍率
(Ctrl+マウススクロールで変えれるあれ)を100%よりも大きい高倍率で
切り取った方が画質が良い。
従って、その画像を取得するマクロの直前に、
エクセルの画面の大きさを変えれるコードがあるので、
それを直前に入れ、それを切り取れば恐らく高画質のが出来るんじゃないかな。
最後は勿論ばい倍率をもとに戻すマクロを入れれば良いと思う。

101 名前:デフォルトの名無しさん [2021/04/01(木) 12:01:45.09 ID:fy6TS88x0.net]
>>90
インスタンス起動ではないですよね

102 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 15:56:27.00 ID:yB6nLlLi0.net]
>>92
Ruby で作った。
正規表現の否定先読みなどを使えば、もっとスマートに書けるかも

# ? は、直前のパターンの0〜1回の繰り返し。「https?」は、「http|https」と同じ意味
re = %r!(https?://)! #=> https?:\/\/

input_str = %w(https://a/b.html c https://x/y).join
#=> "https://a/b.htmlchttps://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", "c", "https://x/y"]

103 名前:102 mailto:sage [2021/04/01(木) 16:01:13.59 ID:yB6nLlLi0.net]
>>102
修正
>re = %r!(https?://)! #=> https?:\/\/
re = %r!https?://! #=> https?:\/\/

( ) は、いらない

104 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 16:53:17.71 ID:7y1pTd6e0.net]
>>94
オプションのスマイルカーブをリアルタイムに描画するエクセルソフトとかもあるよ。

105 名前:デフォルトの名無しさん [2021/04/01(木) 17:08:13.22 ID:jznaQuthF.net]
外部からローカルのファイルを更新するなんてマルウェアみたいだな。

106 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 21:32:16.81 ID:5T6IIfi20.net]
>>95
配当なんてせいぜい数%
そこから税金2割引かれる
値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない
つまり税金を考慮した期待値はマイナス

107 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 23:13:35.12 ID:yB6nLlLi0.net]
>損しても2割補填してもらえるなんてことはない

補填してもらえる。
何年か損失を繰り越ししていれば、儲かった時に相殺される

長年、銀行が税金を払わないのは繰越損失があるので、
その後、利益が出ても相殺されるから

108 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 20:32:20.64 ID:OjzTopDr0.net]
>>107
永久保証ならな
3年でさようならなんだから期待値はマイナス



109 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:18:57.57 ID:0vCxCYiYa.net]
最近のはinternetexploreを許否するwebがあるからこまる
スマホならともかくビジネスではまだ主流なのに

110 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:25:49.87 ID:RckTLwqyd.net]
さすがワッチョイにIEを出す男は言うことが違う

111 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:59:03.48 ID:D2e+M4g2M.net]
Web開発でIE対応が要件にないときにはむしろ意図的にIEで動かないようにするわ
勝手にIEで使われて文句言われるの最高にウザい

112 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:29:03.89 ID:XPTw6Pj4M.net]
>>33
自己レスだがわかったわ
WEBクエリでWEB内容をシートに書き出す
その中から出来高とかのワードをfindで探して
そのワードのn行後を取ってくる
みたいな動作をしてるんだけど、
ヤフーファイナンスの仕様が変わって
n行後の場所が変更になってた

ETFだけは従来の場所だから
上記結果がゼロならば違う場所を
取ってくるようにした

コピペプログラマだから
今回findとかOffsetを強制的に
学ばされて勉強になった

113 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:43:31.82 ID:LoNYZ+kpF.net]
>>110
IEが拒否されるときは
こっそりExcelシートでhtml をつくるだよ
htmlならまず拒否されないから

そーして、いつの間にかフォルダーが開いてる
フォルダー御開帳よ

114 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 02:10:27.86 ID:7SFCjwlv0.net]
ListViewのすべての項目を一発で削除する方法はありませんか?
ListBoxならClearメソッドが使えるようなのですが

115 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 03:01:59.01 ID:OlWsfN+XM.net]
>>114
ListView.ListItems.Clear

116 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 04:07:16.17 ID:hsI5tKvB0.net]
別ブックから別ブックへ値を持ってきたいときって、コピーか配列使うしかないですか?
コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?

117 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 06:20:04.03 ID:5jDGrLPha.net]
コピーでいいやん

118 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:08:15.45 ID:X/c7fPAEM.net]
>>116
コピー先ブック.コピー先シート.Range().Value = コピー元ブック.コピー元シート.Range().Value
カッコ内はテキトーに



119 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:44:02.06 ID:7SFCjwlv0.net]
>>115
ありがとうございます!うまくいきました
すみませんがListViewについてもう一つ教えていただけないでしょうか

MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています
リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか

ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます
ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています

120 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 17:46:13.14 ID:JgvM3WMx0.net]
>>116
コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる

121 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 18:49:59.93 ID:hsI5tKvB0.net]
>>116です
>>118さんのいった通りrangeにvalueをつけてあげればrange.value =range.valueでうまく値をいれることができました
まだオブジェクトがうまく理解できていなかったです
もっと勉強したいと思います
ありがとうございました!

122 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 04:34:52.29 ID:3N8BM4zS0.net]
セルには0.9って入力してあるのに
VBAのcellsでそれを取得すると1と認識されるんですが
勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?

123 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 07:04:34.80 ID:FxhyQ6l10.net]
Currency型の変数に代入する

124 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 07:43:12.07 ID:CnxjloBy0.net]
>>123
そだね
ただCurrency型は小数点4桁までしか扱えないから
上記みたいに小数点1桁だったらいいけど
5桁以上扱ったり

125 名前:掛けたり割ったりする場合はDoubleの方がいいかな

ただ、Double型の場合は
浮動小数点あつかいでIEEE754規格だから
変に丸められちゃうことがあるんでかけ算割り算行う時は
一度整数にして計算してやる必要があるけど

まぁ使い所でどの型使うのか分けて使うのがいいかもね
[]
[ここ壊れてます]

126 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 12:36:23.48 ID:3N8BM4zS0.net]
>>123
>>124
ありがとうございます。integer型にしてました

127 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 17:42:39.68 ID:GNHugBRe0.net]
>>122
0.9の小数点以下を切り捨てたら 0 じゃね 

128 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 18:04:06.91 ID:34gLfvfqa.net]
別にInteger使う理由もないしlongにしちゃえばとも思う



129 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 19:09:20.57 ID:IFZcDQ1J0.net]
>>126
たしかに

130 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 06:08:10.23 ID:KMOOpCjWa.net]
型を指定すると遅くなるから
できるだけ指定なしがよいよ
マクロらしさを生かそう

131 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 07:02:52.46 ID:Au4GybQm0.net]
>>129
メンテが遅くなるからだめ

132 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 10:21:14.29 ID:e+L9SfjT0.net]
>>129
おいおいw
いくら質問スレで初心者だらけだからって
適当なことを教えてはいけない

指定しなかった型には自動的にVariant型が割り当てられて
本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる

VBAは比較的型の扱いが雑でも何とかなる方ではあるが
頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい

133 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 11:09:39.71 ID:jDDsYkyr0.net]
複数の多次元配列をプロシージャに参照渡しするときはどう書けばいいですか
こう書くとスルーされます。

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

134 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 12:45:54.77 ID:e+L9SfjT0.net]
>>132
うん、まあ
引数の型をVariantにしているからでしょうなぁ
何故Variantにすると値渡しになるのかは分からんけど

ちゃんと変数宣言のところで
StringとかIntegerとかの配列型宣言をして
呼び出される関数の引数にも
それに見合った型にすれば参照渡しされるんじゃない?
試してみて

135 名前:132 mailto:sage [2021/04/06(火) 14:36:15.96 ID:jDDsYkyr0.net]
>133
知らなかったです。ありがとうございます

136 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 14:39:05.93 ID:7PISA/BhM.net]
>>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
って書けばいいだけだと思う

137 名前:132 mailto:sage [2021/04/06(火) 19:30:17.02 ID:jDDsYkyr0.net]
>>135
最初はそれでやっていたのですが、同じくスルーされてました
このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、
サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。

138 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 19:51:59.72 ID:JmeclF78d.net]
ブレークポイントで止まらないのはおかしい
根本的に別のとこで間違ってる



139 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:36:50.07 ID:DMwNdxSba.net]
うむ、おかしい

140 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 22:23:14.18 ID:kxv5hjcy0.net]
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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<295KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef