21/03/18 22:08:43.71 jtngtgXU0.net
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part69
スレリンク(tech板)
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2:デフォルトの名無しさん
21/03/18 22:33:41.83 e6JgDwDC0.net
教えて下さい。
あるシートに買物記録があり、日付や購入店、商品名や単価の他に、商品の分類という列があります。
その列には「文具」「食品」「書籍」等が入力されています。
VBAで以下の動作をさせたいです。
↓
別シートにあるダウンリストに、選択肢として、この商品分類に入力されている値を設定する。
重複して入力されている値は無視。入力されているすべての「分類」をひとつずつ選択肢にする。
↑
これをどう書けばいいのか、教えて下さい。
よろしくお願いいたします。
3:デフォルトの名無しさん
21/03/19 02:09:13.85 pQtJO8X70.net
関数でも分類列をMATCHで検索してRow()と不一致なら空白として、それを入力規則にすれば出来そう
VBAでやるなら連想配列使って重複弾いて、かな
4:デフォルトの名無しさん
21/03/19 12:08:42.44 Efxeclnea.net
>>2
もう少し個別にどの部分で詰まっているか書いた方がいいんじゃね
5:デフォルトの名無しさん
21/03/19 12:19:16.87 Rf8ZEH4N0.net
>>2
ワークシート関数でいいなら
適当なセルに
=UNIQUE(商品の分類が入力された列)
と入力すると重複整理された配列が入力される
プルダウンリストを作りたいセルを選択して「データの入力規則」を選択、
規則をリスト、ソースをさっき作った配列がある列にする
6:デフォルトの名無しさん
21/03/19 13:13:27.10 LUl3FuSJa.net
ピボットグラフのRefresh処理が重くて困ってます
汎用的な処理中に停止すべき項目(画面描画、自動計算、イベント、アラート等)は停止させています
元テーブルの行は100程度です
処理を軽くする方法があればご教示願います
7:デフォルトの名無しさん
21/03/19 20:19:38.16 TXt81ZmU0.net
>>6
ピボットテーブルの設定で「更新時に列幅を自動調整する」のチェックを外す
8:デフォルトの名無しさん
21/03/19 20:23:00.26 Rf8ZEH4N0.net
ググるとそれ出て来るけど、あんまり意味ないよ
って言いつつ効果あったら恥ずかしいけど
9:デフォルトの名無しさん
21/03/19 22:16:15.80 TXt81ZmU0.net
初心者にはそのくらいしか教えられん
10:デフォルトの名無しさん
21/03/19 22:28:12.63 ZGQ0wMm+a.net
>>7
ありがとうございます
ですが 処理が重くて困っているのはテーブル(ピボットテーブルではない)から作っているピボットグラフなのです
これが重かったりするんですかね…?
11:デフォルトの名無しさん
21/03/19 23:06:18.73 Rf8ZEH4N0.net
というか元々のグラフ生成が重いのかマクロが重いのか分からん
普通に更新ボタン押しても重いの?
12:デフォルトの名無しさん
21/03/19 23:55:25.74 tSoX9T0pa.net
>>11
普通に手動でも遅いです…
何かピボットグラフの設定によるものならとも思いますが…
13:デフォルトの名無しさん
21/03/20 00:13:52.57 1HieLmil0.net
グラフ更新よりも関数で固まってる可能性の方が高いから、
一度全部の関数を削除してみて解決するか確認した方がいいと思う
自動計算切っててもピボット更新時に再計算されてる筈だし
14:デフォルトの名無しさん
21/03/20 01:01:30.93 7VltWvHha.net
>>13
ありがとうございます
ワークシート関数は使わず、計算は全部vbaでやっています
関数と言えるのはピボットグラフのグラフ部分だけです
ピボットグラフのグラフ部分の関数が重くなっている可能性が考えられるかも、と思いました
ありがとうございます
15:デフォルトの名無しさん
21/03/20 04:43:36.06 kQoUW+sA0.net
すげえなワークシート関数一切使わんでマクロだけでやるとは
16:デフォルトの名無しさん
21/03/20 06:51:00.93 EyTYq69F0.net
遅いとか速いとか漠然としているので何秒かかっているかもわからんし
データ量やステップが増えればある程度遅くなるのは当然じゃね
17:デフォルトの名無しさん
21/03/20 07:28:18.81 /meO8w1y0.net
2~3秒でも遅いと思う人もいるしね
18:デフォルトの名無しさん
21/03/20 10:08:34.03 D1FjuE5r0.net
VBA使ってんならどの部分でどんだけ時間かかってるか測定すりゃいいだけの話なのになぜしないんだろう
19:デフォルトの名無しさん
21/03/20 11:15:44.57 Awf5aTeqa.net
>>18
Refreshのところで3秒かかっています
他処理全部は0.5秒で終わります
20:デフォルトの名無しさん
21/03/20 20:35:40.01 EyTYq69F0.net
PCの性能が低いんじゃね
21:デフォルトの名無しさん
21/03/20 20:48:09.36 kQoUW+sA0.net
それだ!
パソコンのせい
ゲーミング用買えば全てにおいてスマホ級の速さだ!
22:デフォルトの名無しさん
21/03/21 16:59:06.62 .net
5chのスレで1000まで書き込まれたスレを1から1000までコピペしてsheet1に貼り付け
sheet1を特定のキーワードで検索して、書き込まれたレスと返信があったレスを抽出してsheet2に貼り付けしたいです
返信がない場合は空白と入力したいです
アイデアが思い付きません、宜しくお願いします
23:デフォルトの名無しさん
21/03/21 17:54:39.86 fT/r6tJT0.net
いつもの
24:デフォルトの名無しさん
21/03/21 21:09:20.26 aZS3hsKq0.net
>>6
イベントやアラートって目的も無く停止しない方がいいと思うが
25:デフォルトの名無しさん
21/03/22 05:59:51.89 B7/s/yNjM.net
>>22
5chアフィ乙
26:デフォルトの名無しさん
21/03/23 06:37:42.10 3hKAtAlua.net
エクセルからhtmlで保存するとき
グラフが1000以上でもできますか
27:デフォルトの名無しさん
21/03/23 10:17:41.75 lizcePOK0.net
自分で作らずに質問してくる意味が解らない
28:デフォルトの名無しさん
21/03/23 14:45:46.64 KXdqd9JD0.net
ゆとりだから
29:デフォルトの名無しさん
21/03/23 15:16:16.58 J1vTYXys0.net
選択した範囲をグラフにするマクロを作りたいです
マクロ記録でグラフ化するまでを記録し、それを改造してやっているのですが
' 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:デフォルトの名無しさん
21/03/23 17:44:03.01 XH4udpo7H.net
selectionだけでいいんじゃね
31:デフォルトの名無しさん
21/03/23 17:59:59.95 dulEqDGL0.net
チャートをセレクトしてるからセルのセレクトが外れてるんだよ
Addchartの時にセレクトじゃなくてオブジェクト変数にセットして
アクティブチャートの行を【変数名】.(以下略)にしてやってみ
変数にセットするときに文頭のSetを忘れないようにな
32:デフォルトの名無しさん
21/03/24 18:47:39.00 7fnGaRlR0.net
エラー処理で On Error GoTo を On Err GoTo と書いていて
全く気付かずエラーになって初めて、ラベルに飛ばないので気づきました。
デバッグでは判定しないようですが、これらを事前にチェックで見つけることは
出来ないのですかね?
33:デフォルトの名無しさん
21/03/24 19:49:11.93 SmPCs0wuM.net
ヤフーファイナンスの仕様が変わった?のか、
当該銘柄のページから
Set FR = rngResult.Find(What:="出来高*", LookAt:=xlWhole)
みたいな感じで出来高取得してたのが
できなくなった
どこを直せばいいのかわからん
もしかしてこのやり方では
取得できなくなった?
34:デフォルトの名無しさん
21/03/24 19:50:41.85 jjB0JAKeM.net
>>32
まともなコードならGoto文なんてたいしてないはずだからGoto検索して目視確認で良いんじゃね?
35:29
21/03/24 20:04:27.24 lll8bKoA0.net
うまくいきました、ありがとうございました
もう一つ質問させてください
以下は↓の画像のようにデータを範囲選択し実行した場合、3項目ごとに3つのグラフを表示するマクロです
①URLリンク(i.imgur.com)
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」以降の部分を抜き出してグラフを作りたいんです
そこで↓のように範囲選択をして実行したのですが、系列名が出ないのでどのデータかわかりにくいんですよね
②URLリンク(i.imgur.com)
実際のデータは膨大なため、いちいち「行○○~行○○まで」と数値で指定するのは難しいです
できれば②画像のように手動で範囲選択した場合、①のようにa,b,cと系列名が出るのが理想です
.SetSourceData Source:=Range(○○) の部分をうまく変更すればいいのか、それとも
.SeriesCollection(1).Name = ○○ とあとで系列名を変えるのが良いのでしょうか?
36:デフォルトの名無しさん
21/03/24 20:32:05.20 HXzqnMHf0.net
個人的には系列名変える方が好き
37:
21/03/24 21:05:50.71 N9nRIl9KH.net
>>32
インタプリタは事前に文法チェックをしないのが普通ですから、そういうのはインタプリタには無理でしょう‥‥
38:デフォルトの名無しさん
21/03/24 22:00:53.02 T3engiTo0.net
いまどき純粋なインタプリタなんてそうそうないけどな
一応VBAは事前にコンパイルチェックできるが、>>32は
On 変数 GoTo xxっていう文法があってそれにそっているからエラーにならない
そして変数宣言を強制しても、Errって組み込みオブジェクトが宣言なしで使えるという罠
なんかコード分析するようなツールでもあれば検出できるかもしれんが、まあ標準の範囲じゃ無理だな
39:デフォルトの名無しさん
21/03/24 22:54:43.12 /MIQ1K/L0.net
>>35
元データと選択された表示用データを別にすればいいんじゃね
40:デフォルトの名無しさん
21/03/25 01:08:37.06 QAr0K9ya0.net
いきなりアホになってコード組むのが劇遅くなりました。
きれいなコードを書こうと思ったんです。
41:デフォルトの名無しさん
21/03/25 04:40:02.78 d+5Eu7Qca.net
思っただけにしとけ
42:32
21/03/25 10:21:24.54 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:デフォルトの名無しさん
21/03/25 10:44:00.77 kL+lpreE0.net
あくまで個人的だが
MsgBox "○○で異常が発生しました." & vbCrLf & "Err:" & Err.Number & " " & Err.Description, vbExclamation, "Function test"
44:デフォルトの名無しさん
21/03/25 12:19:36.16 v0lS7PpFM.net
個人的には、だけど最終的にはエラー停止が発生せずイレギュラーの場合は自らメッセージを出して処理を終了するってするのが望ましいんじゃないかなぁ
動作確認で何実行してるか知りたいだけなら各プロシージャの頭にDebug.Printでプロシージャ名吐き出しておけばどこで止まったかが分かりやすい
まぁDebug.Printって軽くはないから少し大きめのプログラムだと動作確認中は時間かかる感じになっちゃうだろうけど
45:デフォルトの名無しさん
21/03/25 13:26:17.29 kL+lpreE0.net
確かにそうだ、異常が出ないで済むように入力データのチェックとか
ファイルの有無とかを先に確認すればエラーなんか滅多に起きないからな
46:デフォルトの名無しさん
21/03/25 13:41:18.71 Btw5OylJ0.net
>>45
勿論そういうチェックは入れていますよ
47:デフォルトの名無しさん
21/03/25 14:16:03.41 NGSCZFfJH.net
ちゃんとチェックしてればOn Errorの出番なんか滅多にないはずだけど
複数の関数でエラーが出るなんて、あきらかに設計がおかしい
48:デフォルトの名無しさん
21/03/25 20:31:33.14 hvCMihey0.net
>>42
そうだね。VBAと言うかVB6系のは基本ベタ書きするしかない。
例外としてクラシックASPでVBS走らせたときはエラー行を表示させることが出来る。
VB.Netになるとその辺の情報は細やかに取得出来る。
VBAはベースが古い言語だから仕方がない。
49:デフォルトの名無しさん
21/03/25 20:56:22.97 hvCMihey0.net
>>47
別に設計がおかしいと言うことはないよ。
これはVBAに限らず論理エラーで把握しきれないものは実行時エラーとして捕まえる仕組みは当然のように設定する場合がある。
例えばDBに繋ぎに行って繋がったけどその後で何らかしらの外部的要因で切断された場合など、
実行時エラーが発生するのでその場合は何度か再接続を試みてダメだったら初めてエラーとしてポップアップするとか。
その場合、当然データ復旧させるためにもどこでどんなことやろうとして落ちたのかの情報は重要になってくることが多い。
その他にも概ね実行時エラーは予期せず落ちるものの方が多いので
むしろ状況を把握するためにも細かい情報が必要になることの方が多いよ。
50:デフォルトの名無しさん
21/03/25 21:30:34.23 NGSCZFfJH.net
それってVBAでやるようなことか?
例外処理が必要とわかってるなら.netで書いてTry Catchを使うべきだと思うが
51:デフォルトの名無しさん
21/03/25 22:07:43.24 hvCMihey0.net
>>50
.Netの環境が選択出来る状況ならそれでもいいんじゃないの?
.NetならException継承して好きにエラー設定すればいい。
けどここはあくまでEXCEL VBAのスレだからその話は置いておくよ。
後、VBAでやることかどうかと言うのはあくまで俺はだけど正直あまり選択基準にないな。
第一に要件を満たしているか、次に操作や保守がし易いかかな。まぁ、納期も重要な要素にはなるけど。
だからもし後で保守するのが楽になるなら
場合によってはエラーメッセージ出しておしまいにすることもあるだろうけど
場合によってはエラーハンドリング用のクラス作ったり、
論理エラーもRaiseして実行時エラーのように処理して一元管理したり、
後始末処理をコールバックで移譲して処理したりすることも視野に入れるよ。
52:デフォルトの名無しさん
21/03/26 01:12:09.52 ZoYVceoP0.net
Date型はミリ秒を持てないのでしょうか?
エクセルシートでミリ秒まで表示できている時刻があって、そのシリアル値をVBAのDate型変数に代入するとミリ秒以下が丸められてしまいます
53:デフォルトの名無しさん
21/03/26 01:52:58.20 YMBMwB0G0.net
>>52
時分秒までです。
54:デフォルトの名無しさん
21/03/26 01:56:39.74 YMBMwB0G0.net
>>52
Date型に入れて何がしたかったのか?
55:デフォルトの名無しさん
21/03/26 02:03:12.37 NYhr3fTi0.net
日付を扱うならDate型使うけど
時間を扱うならDouble型使うなぁ
56:デフォルトの名無しさん
21/03/26 08:07:23.35 3Vso6amb0.net
>>52
シリアル値で日付までが整数部で時間から小数点になるから小数点扱える型なのにミリ秒が扱えないと言うのが
ちょっと引っ掛かったので調べてみたよ。
方式はセルにミリ秒まで表示出来るフォーマットを設定して(yyyy/mm/dd hh:mm:ss.000)
隣のセルにその値を代入する数式を書いて、数値で小数点16桁くらい表示するようなフォーマットを設定して、
またその隣にそのセルの値を代入してセルにミリ秒まで表示するフォーマットのセルを用意して
元の値が正しく表示されるか確認した。
で、VBAで最初のセルの値をDATE型の変数に入れてDouble型に変換したら、
キチンと2番目のセルと同じ頭になることが確認出来たので、DATE型はミリ秒まで持てることが分かった。
じゃ、何で丸められちゃうの?
と言うことになると思うけど、どうやらこういうことらしい。
URLリンク(support.microsoft.com)ワークシートのセルに-vba-の日付形式またはバリアント型の日付形式を割り当てようとすると-ミリ秒が最も近い秒に丸められます-4a0af2c5-78de-762f-6431-8669890f585b
57:デフォルトの名無しさん
21/03/26 12:00:33.82 scqWQXi5M.net
>>53-56
ありがとうございます
勉強中でVBAの動きを理解したいだけで、何がしたいという訳ではないです
調べてみましたが以下の理解で合っていますか?
・シリアル値はDouble型の情報
・日付(Date型)はシリアル値の表示形式を"yyyy/mm/dd h:mm:ss"に変更しているイメージ
内部ではミリ秒含むシリアル値を持っており、ミリ秒以下の情報が九められた訳ではない
・シリアル値とDate型はCDbl とCDateで相互変換可能。このときもミリ秒以下の情報は丸められない
・ミリ秒が丸められるのは、Date型をセルに=で代入したとき
これは、Date型の表示をセルにコピーしているため
・セルにDate型でなくシリアル値を代入することで回避できる
58:デフォルトの名無しさん
21/03/26 12:08:12.92 RjaLBbvt0.net
(´-`).。oO(「丸める」をどう入力したら「九める」となるのだろう・・・知らんけど)
59:デフォルトの名無しさん
21/03/26 12:44:01.98 3Vso6amb0.net
>>57
本当の意味合いではかなり違う気もするけど
イメージ的にはそんな感じかな
60:デフォルトの名無しさん
21/03/26 16:10:18.31 xthmZvz40.net
>>58
手書き入力なんじゃないの
知らんけど
61:デフォルトの名無しさん
21/03/26 17:55:08.09 YMBMwB0G0.net
>>57
Excelの内部データ形式は突き詰めない方がいいよ。
それにセルの書式の組み合わせもあるから、初心者は気をつけてね。
62:デフォルトの名無しさん
21/03/26 18:28:35.59 scqWQXi5M.net
ありがとうございます
これ以上は突き詰めないようにします
ここまで解説してるサイトはほとんど見当たりませんでしたが、
Application.Waitの引数にVBAの関数を使うと何故精度が低くなるのか?など
ここまで理解して初めて分かることもあったので良かったです
ちなみに丸が九になったのはパソコンで打った文章をスマホで取り込んだからですね
63:デフォルトの名無しさん
21/03/26 20:17:02.94 9W175/Ms0.net
馬鹿は入力機器で漢字コードが決まると思っているのか
64:デフォルトの名無しさん
21/03/26 20:24:40.81 YMBMwB0G0.net
漢字コードとは古臭いw
65:デフォルトの名無しさん
21/03/26 20:27:23.31 YMBMwB0G0.net
JISコード時代の俗称だぞ。
66:デフォルトの名無しさん
21/03/26 20:58:19.29 9W175/Ms0.net
JISとかEBCDICとか古いこと自慢か?
67:デフォルトの名無しさん
21/03/26 22:02:40.63 AwqZOL59M.net
5chはジジイの巣窟です
昔話に花が咲くのです
68:デフォルトの名無しさん
21/03/26 23:45:57.50 YMBMwB0G0.net
漢字ROMの時代からやってきた過去の人
69:デフォルトの名無しさん
21/03/27 20:27:21.67 5nK2M5CU0.net
質問させてください
worksheetfunctionでsumifやcountifを使用する際の範囲指定はrange(cells(),cells ())と指定する方がいいのか、cells ().resize()と指定する方がいいのか、どっちでしょう?
皆さんはどっちを使用していますか?
70:デフォルトの名無しさん
21/03/27 21:10:41.58 /5jOHbkqF.net
rangeは特殊だからはまりやすい。
71:デフォルトの名無しさん
21/03/27 21:23:53.88 +4xxppTF0.net
範囲をどうやって決めているかによる
72:デフォルトの名無しさん
21/03/27 21:28:05.27 5nK2M5CU0.net
一般的な場合として、例えば最大行までの範囲とした場合はどうでしょうか?
初心者なので、最近、resizeを学んだばっかりなのですが、resizeの方がすっきりしてるような気がするけど、rangeの方がパッと見、分かりやすいよなぁと思いまして
73:デフォルトの名無しさん
21/03/27 21:49:27.21 WrV3x1Cf0.net
たしかえくせるちゅんちゅんでそんな解説記事あったよ
おれは範囲指定だったらrangeかな
resizeは増やす値をちゃんと考慮しないと間違えやすいんだよな
74:デフォルトの名無しさん
21/03/27 22:29:55.09 kX/HYgzKM.net
>>72
その程度ならお好みでどうぞ
値貼り付けとかやる場合は、range(cells(),cells ())なんか使ってられないから、Set、Offset、Rresizeの組み合わせを使っているな
75:デフォルトの名無しさん
21/03/27 22:36:49.88 DIdh8j19a.net
テーブルにすればRangeでCellsを囲う必要がなくなるから、まずテーブルにできるかから考えてみれば
76:デフォルトの名無しさん
21/03/28 12:09:35.83 gO7qo7Yf0.net
現在6秒に1回実行するマクロを組んでいるのですが、
複数のエクセルファイルを開いてそのマクロを実行すると、
マクロを実行しているファイルとは別のエクセルファイルを
マウス等で触ってアクティブにすると、関係のないそのエクセルファイルで
そのマクロが実行されて、肝心のマクロが肝心のファイルで実行されず、
エラーになるという現象で悩まされています。
例えば、ファイル名「A」、ファイル名「B」のエクセルファイルがあり、
ファイル名「A」の中にマクロでセルF1を6秒間隔で選択するコードがあると、
6秒間隔で更新している時にファイル名「B」を触ると(アクティブになる)、
ファイル名「B」のセルF1を選択してしまうのです。本来はファイル名「A」
で組んでいえるのでファイル名Aで実行されなければいけないのに。。。
ファイル名、シート名を指定して他のファイルでは実行できないようにコードを
入れてみたのですが治りません。どうすればよいのでしょうか?
ご教授お願いします。
77:デフォルトの名無しさん
21/03/28 12:41:13.75 SibCEmYdH.net
>>76
コードの中の全部のRangeやCellsにもブック名とシート名を書いてある?
78:デフォルトの名無しさん
21/03/28 12:53:44.04 vqLmoR8/M.net
面倒なのは分かるが意図しない動作をする時はF8で1ステップずつ挙動を確認したりデスクに適当な人形をおいてコードを1行1行何をしている行なのかを人形に対して声に出しながら説明すると原因を突き止めやすいぞ
79:デフォルトの名無しさん
21/03/28 13:27:37.72 slfnYujm0.net
当該ブックのアクティブ化とCallだけでやろうとしている?
これかしら?
Application.Run ‘パス+ブック名’!マクロ名
URLリンク(excelwork.info)
80:デフォルトの名無しさん
21/03/28 14:55:28.65 0AXzz3HSa.net
thisworkbookでいいんじゃね
81:デフォルトの名無しさん
21/03/28 15:28:42.70 58jRB2Jo0.net
>>76
これだとアクティブなシートの[A1]に入力されます
Range("A1")=1
これだと指定したファイルの指定したシートの[A1]に入力されます
Workbooks("Book1").Worksheets("Sheet1").Range("A1") = 1
82:デフォルトの名無しさん
21/03/28 17:37:33.16 NPcBjbDnp.net
まーおそらく値の設定時に
ちゃんとどのブック、どのシートって
設定されていないんだろうけど
もっと気になるのは6秒というスパンの中で
処理が6秒を間に合わなかったらどうするのか
ちゃんと考えて作っていのかってことかな
大きなお世話かも知れんけど
83:デフォルトの名無しさん
21/03/28 18:29:23.67 vpNC6cf/0.net
セルの編集は6秒あれば楽勝です
84:デフォルトの名無しさん
21/03/28 20:03:24.72 5/aHi+ebd.net
>>40
自分が書き込んだかと思ったわw
85:デフォルトの名無しさん
21/03/28 20:31:26.17 y1jMexrp0.net
UIAutomationでInvokeをするVBAマクロをタスクスケジューラで
日次・定時に起動しているのですがロック画面ではInvokeが実行されません
解決策をご存知でしたらご教示お願いします
86:デフォルトの名無しさん
21/03/28 21:54:46.91 FtDhz91V0.net
ロック画面にしない
87:デフォルトの名無しさん
21/03/29 18:09:13.47 RBGHkQmra.net
もはやexcelの問題じゃねーし
88:デフォルトの名無しさん
21/03/29 19:13:47.90 QhuH86uEa.net
なんでFINDで探せないんだろ
とおもったら
改行コードがはいっていたでござる
やれやれ
89:デフォルトの名無しさん
21/03/30 17:58:10.32 0EHjDb6N0.net
質問です
前はExcel2010の時はレジストリを維持って、VBAファイルだけはインスタンス起動が出来るようにするとか可能でしたが
2019にするとインスタンス起動ができなくなってました。
.xlsmファイルだけインスタンス起動するとか方法はないでしょうか
90:デフォルトの名無しさん
21/03/31 04:17:21.25 1Kn3VVGI0.net
右クリックして[新規] じゃだめなのか?
91:76です。
21/03/31 18:32:23.42 Evr26ox50.net
回答くださった皆さん本当に有難うございます。
これから回答いただいた対処法を全て1個1個試していこうと思います。
なお6秒に一回とは、エクセルのセルに株価をリアルタイムで
反映するソフトがあるのですが、それで株のアラート機能を
VBAで自作で作っているので必要なのです。
ではでは。
92:デフォルトの名無しさん
21/03/31 20:42:46.87 .net
sheet1のA1には
URLリンク(www.jma.go.jp)英数字
A3からA10000には、それぞれ異なるURLが記載されています
B1には
URLリンク(maps.gsi.go.jp)
みたいなURLが繋がっている文字列があります
B2からB10000には、上の様なURLが繋がっている文字列があります
A1からA3は
URLリンク(www.jma.go.jp)英数字
B1
URLリンク(maps.gsi.go.jp)
B2
URLリンク(www.mlit.go.jp)
B3
URLリンク(www.jice.or.jp)
みたいにB列にあるセル内を分解して、分解した分だけA列にA1の文字列を補う処理
以降B10000までを処理して
sheet2に記載したいのですが、どのようにすればよいでしょうか?
93:デフォルトの名無しさん
21/03/31 22:33:41.42 GYCr8oLd0.net
何言ってるのか判らんが
好きなようにやればいいよ
94:デフォルトの名無しさん
21/04/01 00:43:47.27 Qm9pGYRd0.net
>>91
「エクセルのセルに株価をリアルタイムで
反映するソフトがある」
こんな珍味なソフトウェアがあるのかw
95:デフォルトの名無しさん
21/04/01 02:05:44.32 GioFRFH30.net
>>94
楽天RSS 岡三RSS。
因みに株は難しく甘い世界ではないので安易にやらないようにしましょう。
ほとんどの人が負けます。
96:デフォルトの名無しさん
21/04/01 03:02:30.23 Qm9pGYRd0.net
変な外国人が作ったんだろうなあ
97:デフォルトの名無しさん
21/04/01 09:31:40.60 JyQIT704d.net
「珍味」ってそういう使い方する言葉だっけ
98:デフォルトの名無しさん
21/04/01 10:40:32.36 Jj+/G5yda.net
たぶん珍妙
99:デフォルトの名無しさん
21/04/01 10:48:06.97 jNbL4ETRd.net
ワークシートの一部を画像として保存する方法にChartObjectsのExportメソッドがあります
が、罫線が一部消えてしまったりフォントが潰れたりして、画質が悪いのが気に入りません
もっと高画質で範囲指定してスクショを保存する方法はないでしょうか?
100:デフォルトの名無しさん
21/04/01 11:51:22.66 tUMm1OA70.net
>>99
クリップボードを手作業で切り取る際、エクセルの倍率
(Ctrl+マウススクロールで変えれるあれ)を100%よりも大きい高倍率で
切り取った方が画質が良い。
従って、その画像を取得するマクロの直前に、
エクセルの画面の大きさを変えれるコードがあるので、
それを直前に入れ、それを切り取れば恐らく高画質のが出来るんじゃないかな。
最後は勿論ばい倍率をもとに戻すマクロを入れれば良いと思う。
101:デフォルトの名無しさん
21/04/01 12:01:45.09 fy6TS88x0.net
>>90
インスタンス起動ではないですよね
102:デフォルトの名無しさん
21/04/01 15:56:27.00 yB6nLlLi0.net
>>92
Ruby で作った。
正規表現の否定先読みなどを使えば、もっとスマートに書けるかも
# ? は、直前のパターンの0~1回の繰り返し。「https?」は、「http|https」と同じ意味
re = %r!(https?://)! #=> https?:\/\/
input_str = %w(URLリンク(a) URLリンク(c)<)).join
#=> "URLリンク(a)URLリンク(x)">URLリンク(cURLリンク(a) "URLリンク(c",)<)
103:102
21/04/01 16:01:13.59 yB6nLlLi0.net
>>102
修正
>re = %r!(https?://)! #=> https?:\/\/
re = %r!https?://! #=> https?:\/\/
( ) は、いらない
104:デフォルトの名無しさん
21/04/01 16:53:17.71 7y1pTd6e0.net
>>94
オプションのスマイルカーブをリアルタイムに描画するエクセルソフトとかもあるよ。
105:デフォルトの名無しさん
21/04/01 17:08:13.22 jznaQuthF.net
外部からローカルのファイルを更新するなんてマルウェアみたいだな。
106:デフォルトの名無しさん
21/04/01 21:32:16.81 5T6IIfi20.net
>>95
配当なんてせいぜい数%
そこから税金2割引かれる
値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない
つまり税金を考慮した期待値はマイナス
107:デフォルトの名無しさん
21/04/01 23:13:35.12 yB6nLlLi0.net
>損しても2割補填してもらえるなんてことはない
補填してもらえる。
何年か損失を繰り越ししていれば、儲かった時に相殺される
長年、銀行が税金を払わないのは繰越損失があるので、
その後、利益が出ても相殺されるから
108:デフォルトの名無しさん
21/04/02 20:32:20.64 OjzTopDr0.net
>>107
永久保証ならな
3年でさようならなんだから期待値はマイナス
109:デフォルトの名無しさん
21/04/03 10:18:57.57 0vCxCYiYa.net
最近のはinternetexploreを許否するwebがあるからこまる
スマホならともかくビジネスではまだ主流なのに
110:デフォルトの名無しさん
21/04/03 10:25:49.87 RckTLwqyd.net
さすがワッチョイにIEを出す男は言うことが違う
111:デフォルトの名無しさん
21/04/03 10:59:03.48 D2e+M4g2M.net
Web開発でIE対応が要件にないときにはむしろ意図的にIEで動かないようにするわ
勝手にIEで使われて文句言われるの最高にウザい
112:デフォルトの名無しさん
21/04/03 13:29:03.89 XPTw6Pj4M.net
>>33
自己レスだがわかったわ
WEBクエリでWEB内容をシートに書き出す
その中から出来高とかのワードをfindで探して
そのワードのn行後を取ってくる
みたいな動作をしてるんだけど、
ヤフーファイナンスの仕様が変わって
n行後の場所が変更になってた
ETFだけは従来の場所だから
上記結果がゼロならば違う場所を
取ってくるようにした
コピペプログラマだから
今回findとかOffsetを強制的に
学ばされて勉強になった
113:デフォルトの名無しさん
21/04/03 13:43:31.82 LoNYZ+kpF.net
>>110
IEが拒否されるときは
こっそりExcelシートでhtml をつくるだよ
htmlならまず拒否されないから
そーして、いつの間にかフォルダーが開いてる
フォルダー御開帳よ
114:デフォルトの名無しさん
21/04/04 02:10:27.86 7SFCjwlv0.net
ListViewのすべての項目を一発で削除する方法はありませんか?
ListBoxならClearメソッドが使えるようなのですが
115:デフォルトの名無しさん
21/04/04 03:01:59.01 OlWsfN+XM.net
>>114
ListView.ListItems.Clear
116:デフォルトの名無しさん
21/04/04 04:07:16.17 hsI5tKvB0.net
別ブックから別ブックへ値を持ってきたいときって、コピーか配列使うしかないですか?
コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?
117:デフォルトの名無しさん
21/04/04 06:20:04.03 5jDGrLPha.net
コピーでいいやん
118:デフォルトの名無しさん
21/04/04 13:08:15.45 X/c7fPAEM.net
>>116
コピー先ブック.コピー先シート.Range().Value = コピー元ブック.コピー元シート.Range().Value
カッコ内はテキトーに
119:デフォルトの名無しさん
21/04/04 13:44:02.06 7SFCjwlv0.net
>>115
ありがとうございます!うまくいきました
すみませんがListViewについてもう一つ教えていただけないでしょうか
MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています
リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか
ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます
ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています
120:デフォルトの名無しさん
21/04/04 17:46:13.14 JgvM3WMx0.net
>>116
コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる
121:デフォルトの名無しさん
21/04/04 18:49:59.93 hsI5tKvB0.net
>>116です
>>118さんのいった通りrangeにvalueをつけてあげればrange.value =range.valueでうまく値をいれることができました
まだオブジェクトがうまく理解できていなかったです
もっと勉強したいと思います
ありがとうございました!
122:デフォルトの名無しさん
21/04/05 04:34:52.29 3N8BM4zS0.net
セルには0.9って入力してあるのに
VBAのcellsでそれを取得すると1と認識されるんですが
勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?
123:デフォルトの名無しさん
21/04/05 07:04:34.80 FxhyQ6l10.net
Currency型の変数に代入する
124:デフォルトの名無しさん
21/04/05 07:43:12.07 CnxjloBy0.net
>>123
そだね
ただCurrency型は小数点4桁までしか扱えないから
上記みたいに小数点1桁だったらいいけど
5桁以上扱ったり
125:掛けたり割ったりする場合はDoubleの方がいいかな ただ、Double型の場合は 浮動小数点あつかいでIEEE754規格だから 変に丸められちゃうことがあるんでかけ算割り算行う時は 一度整数にして計算してやる必要があるけど まぁ使い所でどの型使うのか分けて使うのがいいかもね
126:デフォルトの名無しさん
21/04/05 12:36:23.48 3N8BM4zS0.net
>>123
>>124
ありがとうございます。integer型にしてました
127:デフォルトの名無しさん
21/04/05 17:42:39.68 GNHugBRe0.net
>>122
0.9の小数点以下を切り捨てたら 0 じゃね
128:デフォルトの名無しさん
21/04/05 18:04:06.91 34gLfvfqa.net
別にInteger使う理由もないしlongにしちゃえばとも思う
129:デフォルトの名無しさん
21/04/05 19:09:20.57 IFZcDQ1J0.net
>>126
たしかに
130:デフォルトの名無しさん
21/04/06 06:08:10.23 KMOOpCjWa.net
型を指定すると遅くなるから
できるだけ指定なしがよいよ
マクロらしさを生かそう
131:デフォルトの名無しさん
21/04/06 07:02:52.46 Au4GybQm0.net
>>129
メンテが遅くなるからだめ
132:デフォルトの名無しさん
21/04/06 10:21:14.29 e+L9SfjT0.net
>>129
おいおいw
いくら質問スレで初心者だらけだからって
適当なことを教えてはいけない
指定しなかった型には自動的にVariant型が割り当てられて
本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる
VBAは比較的型の扱いが雑でも何とかなる方ではあるが
頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい
133:デフォルトの名無しさん
21/04/06 11:09:39.71 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:デフォルトの名無しさん
21/04/06 12:45:54.77 e+L9SfjT0.net
>>132
うん、まあ
引数の型をVariantにしているからでしょうなぁ
何故Variantにすると値渡しになるのかは分からんけど
ちゃんと変数宣言のところで
StringとかIntegerとかの配列型宣言をして
呼び出される関数の引数にも
それに見合った型にすれば参照渡しされるんじゃない?
試してみて
135:132
21/04/06 14:36:15.96 jDDsYkyr0.net
>133
知らなかったです。ありがとうございます
136:デフォルトの名無しさん
21/04/06 14:39:05.93 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
21/04/06 19:30:17.02 jDDsYkyr0.net
>>135
最初はそれでやっていたのですが、同じくスルーされてました
このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、
サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。
138:デフォルトの名無しさん
21/04/06 19:51:59.72 JmeclF78d.net
ブレークポイントで止まらないのはおかしい
根本的に別のとこで間違ってる
139:デフォルトの名無しさん
21/04/06 20:36:50.07 DMwNdxSba.net
うむ、おかしい
140:デフォルトの名無しさん
21/04/06 22:23:14.18 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
141:デフォルトの名無しさん
21/04/07 19:30:33.27 aMJgToSe0.net
全部省略すれば勝手にByRefだと思ってけど違うの?
SheetCreate ara, arb, arc
Sub SheetCreate(ara, arb, arc)
End Sub
142:デフォルトの名無しさん
21/04/07 20:03:43.34 rHsSD320H.net
>>140
その認識は半分正しいけど半分は場合によるので間違い
とくに配列を渡す場合はややこしい
143:デフォルトの名無しさん
21/04/07 20:42:25.04 Vn8Hoh2Q0.net
配列・オブ・カリビアン
144:デフォルトの名無しさん
21/04/07 20:47:54.61 nkaFkhSP0.net
>>141
不思議なんだよねー
配列変数だとByrefにしてもVariantで渡すと値渡しになることがある
よしんばVariantが値型だとしても値型の参照渡しで渡るのは参照渡しになるはずなのに何で?
145:デフォルトの名無しさん
21/04/08 15:04:36.48 6DaO6dJm0.net
色々しらべたよ
まず、VBAやってる人はByValとByRefくらいしか気にしない人多いけど、
そもそも変数には参照型と値型というのがあって値型は値そのものが変数に入っているけど
参照型というのは実体が入っているんじゃなくて実体の入っている場所の情報が入っているんだよ。
オブジェクトの類が参照型で、StringやIntegerなんかが値型。
参照渡し、値渡しとこの参照型、値型という組み合わせで何が渡るか決まるんだけど
参照型の参照渡し;
引数の入っているアドレス(場所)を見に行って、その引数の中に入っているアドレスに入っているものを見に行くから、
内容を変更すると関数で呼ぶ前のものも変更されるよ
値型の参照渡し;
引数の入っているアドレスをコピーしてそのアドレスが指してるところの値を見に行くから、
内容を変更すると関数で呼ぶ前のものも変更されるよ
参照型の値渡し:
引数の入ってる値をコピーするけど、その引数の中には実体の入ってるアドレスが入ってて、そっちを見に行くから
内容を変更すると関数で呼ぶ前のものも変更されるよ
値型の値渡し
引数の入ってる値をコピーして、そのコピーした値の内容も値そのものが入っているから
内容を変更しても関数を呼ぶ前のものは変更されないよ
まずこれが大前提ね
146:デフォルトの名無しさん
21/04/08 15:20:56.67 6DaO6dJm0.net
本題に入るね。
配列変数でもその辺は基本変わらないけど、
何故か値渡しにしようとすると構文エラーになるんだ
そんなときは呼び出し先の引数をVariant型に変えてあげればいいって話だけど、
Variant型にしても参照型のものは参照が見られるから内容を変えれば関数を呼び出す前の内容も変わるんだよね。
variant型の配列を作って値型のものと参照型のものを違う要素に入れてそれを引き数に値渡しで設定してあげると
参照型のものを入れた部分は変更すると関数呼び出す前のものにも反映され、値型の部分は変更が反映されない。
思ったよりお利口さんだったよ。
結論を言うと
何で配列でキチンと型設定して値渡ししようとすると構文エラーで落ちるんじゃマイクロソフトのボケが!!
と言うところに落ち着いたよ
147:デフォルトの名無しさん
21/04/08 17:10:39.89 OX80XKzVM.net
うろ覚えで申し訳ないんだけど、引数をByVal TestAry() As Longとかにすれば値渡し出来なかったっけ?
148:デフォルトの名無しさん
21/04/08 17:27:48.87 6DaO6dJm0.net
>>146
呼び出し元に設定した変数もしくはリテラル値が型的にあっている、
もしくは暗黙の変換が行われる型ならそもそも設定しているものが値型。
そうでなければエラーになると思う。
149:デフォルトの名無しさん
21/04/08 17:47:34.27 vZ3ddDF70.net
質問場所間違ってたら言ってください
iPhone用Excelで仕事の日報を書いてるのですが
時間を書き込んで→を押して数字を書き込むと
前のセルに書き込んだ数字
例えば8:00と書き込んで→を、次に16:00と記入しようと1を押すと8:00:001ってなってしまいます
これってならなくする方法ありますか?
150:デフォルトの名無しさん
21/04/08 18:07:25.00 BiHFumMw0.net
>>148
死ね
151:デフォルトの名無しさん
21/04/08 18:07:51.70 6DaO6dJm0.net
>>148
iPhoneは持ってるんだけどPC側しか365のアカウント持ってないんだ。ごめんね。
だけどググってみたら書式設定は出来るみたいだから数字にしたいセルの部分をそう書式設定すればいいんじゃないかな?
あと、一応EXCEL関連のスレはここに有ったけど
Excel友の会
スレリンク(software板)
何か過疎ってるどころか最後の書き込みが去年の10月だから機能していないね。ここのスレでEXCELのこと聞くのは
ここのスレの住人がみんなOKすれば大丈夫だと思うけど
今まで随分色んなことあったから難しいかも知れないよ。
152:デフォルトの名無しさん
21/04/08 19:22:03.89 wZLPNhcm0.net
こんなマクロの使い方もあるようで。
URLリンク(anond.hatelabo.jp)
153:デフォルトの名無しさん
21/04/08 20:16:35.28 JmFnD0edM.net
要素数の限界ってどれくらいなの?
多次元配列で一次元あたり数千とかにしたらメモリ不足のエラーになった
154:デフォルトの名無しさん
21/04/08 20:37:06.14 eomKGQCU0.net
多次元はめっちゃメモリ食うからなるべくやるなと言われている
155:デフォルトの名無しさん
21/04/08 22:20:43.27 xay8Megr0.net
タスクマネージャでも眺めながら色々試してみては
物理メモリだけじゃないだろうけど、なんぼか目安にはなるだろう
156:デフォルトの名無しさん
21/04/08 23:36:50.07 zGFXp+zdH.net
64bit版なら配列変数1個あたり4GBまで
32bit版は2GBまで
つまりデータの型によって要素数の上限は違う
157:デフォルトの名無しさん
21/04/09 00:36:31.60 J+L5UjPE0.net
>>153-155
ありがとう
タスクマネージャ見ても余裕だったんで理由を知りたかった
次元数2次元までにしといた方が無難だね
158:デフォルトの名無しさん
21/04/09 17:10:54.57 v0s3XxNT0.net
>>156
そうだね
あくまで俺の経験則だけど
2次元から3次元にしたとき何でも一挙に難しくなる気がする
元々簡単な作りのものしか扱わないならいいけど
VBAではないけど以前東大生が3次元で配列の制御を行うロジックを作って
自分でもよく分からなくなってしまったというのを見たことがあるし
ゲーム作るときも画面表示するだけで
三角関数はもとより行列やアフィン変換とか
理解してないとまともに出来ない
メモリ食うのも理由のひとつかも知れないけど
3次元には出来れば手を出さない方がいいと思う
159:デフォルトの名無しさん
21/04/09 19:26:47.90 o5ukQupNM.net
>>157
ちなみに今回使おうとしたのは3次元配列なんだけど、3次元配列にした理由は同じような2次元配列に順番にアクセスしたかったから
こういう場合は2次元配列を複数用意すればいいのかな?
3次元配列にした方がスマートに記述できると思ったんだけど
160:デフォルトの名無しさん
21/04/09 19:41:20.17 H0DC02Cp0.net
行、列、シートで、3次元
配列で重くなるならセルに入れてしまうという手も
161:デフォルトの名無しさん
21/04/09 21:04:50.47 v0s3XxNT0.net
>>159
シートを余計に食うけど場合によってはそれもひとつの有効手段だよね。
あまり見せたくなければVerryHiddenとかにしてしまえばいい訳だし。
>>158
使い処によると思うよ。使い方が単純でスピードが速い方がいいならそれでいいと思う。
ただ、これはあくまで「俺が」なんだけど実はあまり配列が好きじゃないんだ。
だからと言うわけでもないんだけどある程度大きなプログラムを組むときは
配列を使うこともあるにはあるけど、2次元配列の代わりにプロパティだけのエンティティクラス作って
それをコレクションやディクショナリに詰め込んで使ったり、
レコードセットを使ったりすることもあるし、
3次元では上記したような仕組みのものやそういった仕組みを持つクラスを作って、
それをまたコレクションやディクショナリにいれたりするように作ったりとか。
何でこんなまどろっこしいことするのかと言えば、要素と言うか項目やレコードの追加や
データ抽出が楽なんだよね。
シート足していいと言うなら先程の>>159の人の案も有りだと思う。
削除系は使えないけどシートにはその気になればSQLが投げられるから
抽出や計算、変換、加工とかする必要があるならかなり楽に作れることもあるからね。
162:デフォルトの名無しさん
21/04/09 21:29:44.17 H0DC02Cp0.net
三次元配列は単純に頭がしんどい
三次元空間の様にそれぞれの次元が同じ重みを持っているなら仕方ないけど、
それ意外なら行列の二次元+シート一次元、のように分けたほうがスッキリすると思う
163:デフォルトの名無しさん
21/04/09 21:34:45.69 VGCoQhdKa.net
省略したら値渡しでしよ
再帰かけるときには値渡しにしないと、いろいろ都合がある
164:デフォルトの名無しさん
21/04/09 21:37:45.95 VGCoQhdKa.net
>>161
賛成、エクセルのシート使うよね
165:デフォルトの名無しさん
21/04/09 21:50:51.12 v0s3XxNT0.net
>>162
これな
実はVB.Netの場合は省略するとByVal(値渡し)で
旧VB6やVBAの場合は省略するとByRef(参照渡し)で
両方やってる人はよく間違えるんだよね。
再起の場合は確かにどれを反映させてどれを反映させないか結構大事になるけど、
まぁ基本デフォルト使わないで明示的に書くだろうからあまり気にしなくてもいいかもね。
166:デフォルトの名無しさん
21/04/10 00:28:07.23 xAikY8XJ0.net
みんなありがとう
>>160
VBAは基本の参考書を読んで一通り分かったつもり
でもクラスは上級者すぎて分からないや
一応自作のオブジェクトという理解でいる
色々案を考えてくれてありがとう、もう少し勉強してからそのあたりも試してみる
167:デフォルトの名無しさん
21/04/10 06:57:57.98 +Fv9eRvVa.net
シートに書き出すととピポットにできるから
ピポットなら何重にも次元が増やせるし
処理もはやい
ピポットとvbaを組み合わせると、
けっこうはやい
168:デフォルトの名無しさん
21/04/10 08:02:59.36 GLiDRYw80.net
>>165
頑張って
クラスはObject指向言語だと必須だけどVBAでは無理して知ってる必要もないから気が向いたときに覚えればいいと思うよ
とは言ってもクラス自体はそんなに難しいものじゃないんだけどね。よく、ひとつの纏まった機能を他のモジュールに書くよね。
あれを標準モジュールの変わりにクラスモジュールに書けばクラスの出来上がり。
後は他のオブジェクト使うときと同じようにNewして変数に入れて、変数名.メソッド名、変数名.プロパティ名とか書けば使えるよ。
どっちかっていうと考え方と使いどころに慣れるまでがちょっと大変かもね。
それ以上の多態性とかデザインパターンとかの知識を身につけるころには他の言語やってるだろうから
今そんなに深く考えることもないと思うよ。
169:デフォルトの名無しさん
21/04/10 09:30:59.12 ASUPMck3M.net
>>165
VBAの範疇ならクラスは忘れてもいいと思う
コンストラクタに引数も持てないし継承もできないから普通にユーザー定義型と操作ルーチンをモジュールにまとめるのとたいして変わらんし
170:デフォルトの名無しさん
21/04/10 10:08:24.05 +Fv9eRvVa.net
エクセルというクラスを使いこなせば
ビジネスなら十分
エクセル以上のobject作るのは無理だから
なんつてセカンドオニオンでした
171:デフォルトの名無しさん
21/04/10 15:51:59.07 duTza7EGd.net
自分もクラスで挫折して今はユーザー定義型で幸せです
172:デフォルトの名無しさん
21/04/10 16:02:42.86 4ha6UGTxp.net
自分もユーザー定義にした途端お金が入って彼女が出来ました。今ではとっても幸せです。
173:デフォルトの名無しさん
21/04/10 17:05:30.13 eY7Q/L5k0.net
そうかい
174:デフォルトの名無しさん
21/04/10 20:22:47.19 mgDf3XRg0.net
>>170
プロパティとかコンストラクタとかあとは鯛焼きの型とかいきなり説明しだすから分かりにくいんだよな
175:デフォルトの名無しさん
21/04/10 20:23:09.87 mgDf3XRg0.net
最初はクラス内の変数と関数だけでプロシージャ内のコードがこれだけ簡潔書けるようになります程度でいいのに
176:デフォルトの名無しさん
21/04/10 20:31:08.56 u4vdYafN0.net
EXCELvbaで、クラスってどういう時に使うのでしょうか
ゲームのように細かいオブジェクトが多数ある状態なら分かりますが、
表の状態になったデータだと、今ひとつピント来ないです
社員classや顧客classを作るのでしょうか
177:デフォルトの名無しさん
21/04/10 20:42:21.31 r9QO1mE4M.net
無理に使う必要は無い。
「使わなくては!」と閃く状況が来るときまで。
178:デフォルトの名無しさん
21/04/10 21:10:26.00 2jN52YXT0.net
>>175
よく使うけど毎回書くのが面倒な処理がある時
DB接続とかUIAutomationとか長げぇよってやつ
179:デフォルトの名無しさん
21/04/10 21:22:16.81 GLiDRYw80.net
>>175
どう使うかを決めるのも自分。
だからクラスそのものより
考え方や使いどころに慣れるまで
そっちの方が大変だって言ったんだよ。
まぁ表であればあくまで俺であれば、
項目をプロパティにして
1レコードをクラスにして、
それをコレクションやディクショナリに
登録して使うよ。前記したけどね。
180:デフォルトの名無しさん
21/04/10 22:23:34.34 duTza7EGd.net
オレ知ってる!
クラスってニューして使うんだよな!
181:デフォルトの名無しさん
21/04/10 23:22:47.33 kj/emQZa0.net
エクセルでガントチャートを作りたく極力簡単な方法を探しています。
(手順が少なく、エクセル苦手でも理解しやすい)
自力で探したところ
URLリンク(excel-master.net)
の「条件付き書式でガントチャートをつくる」が一番簡単な気がしましたが
より簡単な方法があったらご教授いただきたく。
windows板で尋ねようかと思いましたがエクセル専用スレが無いため
詳しい人が多そうなこのスレにお邪魔しました。
182:デフォルトの名無しさん
21/04/10 23:41:30.33 KgXo78Rva.net
要望は何回もやり直したほうがよいよ
さいしょは相手も自分もよくわかってないから
Ver3ぐらいでようやく完成する
183:デフォルトの名無しさん
21/04/11 00:00:57.05 0+LhiyyI0.net
>>180
あ、これ、俺は苦手だわ
WBS作ろうとするとどうしても
簡単に作ることより分かり易くする方に
力入れちゃうから多分そのリンク先に
載ってることよりややこしい数式にしてしまう
ま、WBSなんて基本、予定線と実績線、
あと遅れそうになった時のワーニング色と
遅れた時のアラート色、
あと遅延リカバリ用の枠付けとくくらいだから
大したもんじゃないからまぁ頑張って。
こういうの作るときにもっと大事なのは
見積もりとそれに対するする人員と期間の
配分だから、そっちも任されているなら
そっちに作業の80%くらい割り振って
考えた方がいいよ。
184:デフォルトの名無しさん
21/04/11 02:17:20.23 x6o0gjqGd.net
馬鹿ばっかのスレ
185:デフォルトの名無しさん
21/04/11 02:27:18.88 C7VIYXjZa.net
ガントチャートだとあんまり工程管理にならないんだよ
やってみるとわかるけど
8割がた遅延する、というか遅れてないと進捗がわからないだよ
1、そもそもスタートしていなかった?
これがいちばんおおい
2、深刻で致命的なもんだいが、見つかるとはいちばん最後
だから
186:デフォルトの名無しさん
21/04/11 10:19:59.88 Gib6KHmfM.net
>>180
そのガントチャートで問題ないならそれが一番簡単だと思う
ただ>>184が言うような日程管理をしたいならもうちょい作り込むなり専用アプリを使ったほうがいい
187:デフォルトの名無しさん
21/04/11 11:13:40.17 udnt6yH0p.net
質問です
今後このスレ
こう言ったEXCELのとか
旧VB6とか許容すんの?
古参なら今までどういったことが
有ったか覚えていると思うけど
188:デフォルトの名無しさん
21/04/11 11:43:22.55 TwIBijR2M.net
質問者はワークシートでの作り方はある程度想像がつくけどVBAの知識がある人ならよりスマートな方法を知っているかもしれないと考えてここで聞いたんだろうし、
それに対してワークシートの機能でできることはVBA使うよりワークシートの機能でやった方がいいってのは極めて妥当で健全な回答だろう
そんなことでいちいちスレ違い警察さんが出動しなくていいよ
189:デフォルトの名無しさん
21/04/11 12:04:02.09 0+LhiyyI0.net
>>187
そう
許容するのね?
190:デフォルトの名無しさん
21/04/11 12:41:42.70 WBicdlML0.net
excelのOnTime関数をPowerPointで使うこと出来ないよね?同じ機能を持った関数ってある?
191:デフォルトの名無しさん
21/04/11 12:55:23.83 0+LhiyyI0.net
>>189
無いからAPIで行うらしい
URLリンク(detail.chiebukuro.yahoo.co.jp)
192:デフォルトの名無しさん
21/04/11 13:01:24.60 J2w1eWX20.net
Excelから呼び出せないのか
起動中のソフトを検索するワード関数をExcelから呼び出してるの見かけたことあるけど
193:デフォルトの名無しさん
21/04/11 14:13:05.18 WBicdlML0.net
>>190
ありがとう
まったく理解できないけど、もっと楽な方法ないのかなー
194:デフォルトの名無しさん
21/04/11 15:30:39.63 VuRQUus/0.net
vb.netでdllとか作った方が早いような
195:デフォルトの名無しさん
21/04/11 20:16:20.16 MoadxaFG0.net
>>180
スレ作ればいいだろ
厚かましいにも程がある
196:デフォルトの名無しさん
21/04/11 21:10:22.11 LXnW0jT40.net
Python, Julia, Ruby などで使う、Jupyter Lab に、ガントチャートは無いのか?
197:デフォルトの名無しさん
21/04/11 21:40:30.24 VuRQUus/0.net
>>196
あることはある
URLリンク(cafe-mickey.com)
でも結局死ぬほどカスタマイズすることになるから、EXCELで作るのが一番マシ
198:デフォルトの名無しさん
21/04/11 23:13:09.15 rV+Er0Dj0.net
業務とはかけ離れた腕自慢スレになりつつあるなここは
199:デフォルトの名無しさん
21/04/11 23:26:48.43 ZRspFCij0.net
>>180
です。スレ違いな質問に回答くださってありがとうございました。
>>187
さんのご推察どおりここの先生方を最も頼りにしております!
残念ながら任されているのはエクセル上の作業のみであり
人員期間の配分は担当外ですが
コレが一番スマートだと確信できました。
これで安心して作業に入れます。感謝します。
200:デフォルトの名無しさん
21/04/11 23:52:08.05 Omw3/P/WH.net
>>197
昔から、質問の答えが出た後に別の方法を書き込む競争はやってた
201:デフォルトの名無しさん
21/04/12 00:09:38.61 zgwaoc/v0.net
いつものあいつだな
202:デフォルトの名無しさん
21/04/12 02:49:52.91 Bvz5U6oCM.net
まだ引っ掛かる馬鹿がいるのか
203:デフォルトの名無しさん
21/04/12 09:23:22.30 H+Y94TUB0.net
回答者さん同士で競争とか知恵袋と同じじゃんか
無駄にスレの無駄遣い
204:デフォルトの名無しさん
21/04/12 10:17:02.71 5VvoR6W20.net
無駄な書き込みを無駄にスレに書き込んでスレを無駄に使うことはスレの無駄遣いだと書き込むことはスレの無駄遣いかもしれない
205:デフォルトの名無しさん
21/04/12 10:35:19.07 0gH2bD5Aa.net
無駄な努力が、むくわれるのさ
206:デフォルトの名無しさん
21/04/12 10:49:33.17 0gH2bD5Aa.net
VLookupをつかったのは無駄な努力だったな
やめときゃよかった
207:デフォルトの名無しさん
21/04/12 10:56:04.87 0gH2bD5Aa.net
これをマクロでどうにかなりませんか
そういってわたされたのがVLookupが山のように貼り付けられた
エクセルシートだった
うまくと動くけと突然とまるw
けっきょくforループの検索に代えた
とここまで書いておもいだしたが
去年、メンタル悪化で退職した同僚がいたけど
のこしていってのはやはりVLookupの山だったな
動かないVLookupで退職するまえに本スレにご相談ください
208:デフォルトの名無しさん
21/04/12 12:12:04.06 8dcLaG4EM.net
Excel初心者はVLookupしか知らないから
何でもこれでやろうとして自爆する傾向があるね
209:デフォルトの名無しさん
21/04/12 12:24:31.30 H+Y94TUB0.net
そのVlook関数はマクロ経由なのかが気になる
210:デフォルトの名無しさん
21/04/12 12:42:14.50 HPbAbv3kH.net
池の女神は言いました
あなたが落としたのはVLOOKUPですか、HLOOKUPですか
いいえ私が落としたのはXLOOKUPです
211:デフォルトの名無しさん
21/04/12 13:02:43.22 A3OoULtt0.net
質問です
>>209の言う
VlookupとHlookupの頭文字は
バーティカル(垂直)とホライズン(水平)
なのは分かるんですがXlookupの頭文字の
Xってなんですか?
EXCELの質問でスレ違いなのは
重々承知していますが
このスレにいる方々の知識の豊富さに縋らせてください
考えると夜も眠れない有様です
212:デフォルトの名無しさん
21/04/12 13:25:12.45 QkakYyyta.net
>>210
クロス
213:デフォルトの名無しさん
21/04/12 13:30:51.45 A3OoULtt0.net
>>211
クロスのスペルってCROSSではないんですか?
それともX_JAPANの「エーックス」のクロスですか?
分かりません><
214:デフォルトの名無しさん
21/04/12 13:34:07.13 X9TSjYQR0.net
XmasのX
215:デフォルトの名無しさん
21/04/12 13:36:54.52 MyLZJXYdp.net
向こうではCrossとかChristmasをXで省略するから、だと思う
216:デフォルトの名無しさん
21/04/12 13:41:07.52 A3OoULtt0.net
>>213
>>214
やっと分かりました
今日からぐっすりと眠れそうです
ありがとうございました
217:デフォルトの名無しさん
21/04/12 15:02:08.77 3rdXwFWw0.net
>>215
死ねよ
218:デフォルトの名無しさん
21/04/12 17:28:11.89 H+Y94TUB0.net
バツルックアップじゃないの??
事務のオバチャンにそう聞いたけど
219:デフォルトの名無しさん
21/04/12 19:56:57.26 UqVxKohHa.net
とんこつととんかつの違いはなんですか
そういう質問をうけたときがあったなぁ
220:デフォルトの名無しさん
21/04/12 20:02:02.68 HPbAbv3kH.net
とんかつ
とんかち
221:デフォルトの名無しさん
21/04/12 22:40:18.25 6cC4Cv/z0.net
マジレスするとExtraやExtendのX
222:デフォルトの名無しさん
21/04/13 12:25:16.60 XNPY+hAHa.net
ガントチャートの欠点は
遅れの検出がおそいだよね
期限が過ぎないと遅れることがわからない
これでは手遅れですよ
223:デフォルトの名無しさん
21/04/13 12:40:10.17 5GJi7nDK0.net
>>221
あ、そうなんだ
EXCELの数式だったら予定線より実績線が
二日くらい前になったらワーニングで黄色、
予定線以降になったら赤とかにしとけば
ワーニングに入った時点でリカバリ案とか
会議で話し合えるのにね。
224:デフォルトの名無しさん
21/04/13 12:54:32.74 mzxN/X4qM.net
期限過ぎる前に進捗率がヤバくなればリスケで仕切り直し
いつまで経っても期限が過ぎることは無い
225:デフォルトの名無しさん
21/04/13 13:24:50.99 5GJi7nDK0.net
>>223
本当にありそうで怖いわ!
226:デフォルトの名無しさん
21/04/13 17:28:26.59 XNPY+hAHa.net
開始日でだいたいわかる
おおくのばあいはまともにスタート出来てないからw
人がいない、資料がそろってない、仕様がきまってない
だも
スタートできなきゃゴールするわけがない
227:デフォルトの名無しさん
21/04/13 20:57:49.87 5GJi7nDK0.net
>>225
開発あるあるだなw
そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。
他のある程度大きいシステムになると
・客先から上がって来ない要件定義
・客先だから強く言えないチームのリーダー
・差し迫る納期
・焦りが出てきてイラつく俺ら。それを宥めるリーダー
この辺からが違うところかな
・システム間の連携や他システムとの連携のため伸ばせない納期
・更に焦る俺ら。宥めきれなくなるリーダー
・上がって来る要件定義、血眼で設計書を作る俺ら
・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書
・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら
・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間
・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人
・何とかSTまで終了。飛ばされるリーダー、バグだらけの成果物、昇天する俺ら
最悪こんな感じかな。
228:デフォルトの名無しさん
21/04/13 21:11:48.26 QqfAiqTvM.net
>>225
開発あるあるだなw
そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。
他のある程度大きいシステムになると
・客先から上がって来ない要件定義
・客先だから強く言えないチームのリーダー
・差し迫る納期
・焦りが出てきてイラつく俺ら。それを宥めるリーダー
この辺からが違うところかな
・システム間の連携や他システムとの連携のため伸ばせない納期
・更に焦る俺ら。宥めきれなくなるリーダー
・上がって来る要件定義、血眼で設計書を作る俺ら
・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書
・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら
・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間
・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人
・何とかSTまで終了。飛ばされるリーダー、ハゲだらけの社員、昇天する俺ら
最悪こんな感じかな。
229:デフォルトの名無しさん
21/04/13 21:15:01.18 5GJi7nDK0.net
うーん、何か接続がおかしいのかな
他のスレに誤爆になってこのスレでも2回載ってしまった
すまんこ
230:デフォルトの名無しさん
21/04/13 21:34:03.40 QqfAiqTvM.net
うーん、何か接続がおかしいのかな
他のスレに誤爆になってこのスレでも2回載ってしまった
おまんこ
231:デフォルトの名無しさん
21/04/13 21:38:41.78 5GJi7nDK0.net
>>229
おいw
232:デフォルトの名無しさん
21/04/14 07:51:01.50 EILUghab0.net
ウンコマクロ
233:デフォルトの名無しさん
21/04/14 19:17:03.44 hXL/FQf4a.net
まあ。そんなんだ
234:デフォルトの名無しさん
21/04/14 19:29:05.82 jCprHRHj0.net
EXCEL VBAは好きだし凄く肌に合ってると思うけど、案件単価がちょっとなぁ
235:デフォルトの名無しさん
21/04/14 19:47:31.92 kMGrei9fM.net
EXCEL VBAが肌に合う様な奴が案件単価とか生意気。
236:デフォルトの名無しさん
21/04/14 20:39:37.17 E4KyUeCU0.net
一般事務が仕事中に覚える→結婚・退職→主婦の傍ら有り余る時間で糞みたいな単価で受注
まぁ、悪い事でもなんでもないんだけどね、うん
237:デフォルトの名無しさん
21/04/14 20:45:27.19 ijCB3EYv0.net
あたまが鉛のようにおもい
238:デフォルトの名無しさん
21/04/14 20:47:48.07 cTgQ8ZPt0.net
1時間で作れるような案件が高いわけない
239:デフォルトの名無しさん
21/04/14 20:52:06.82 ijCB3EYv0.net
冷戦時代日本がロケットのことでロシアに教えをこうたとき
一言ジャイロに問題があるといって
100億ぐらいもって去っていったそうな
240:デフォルトの名無しさん
21/04/14 21:21:01.64 tTtaKpUk0.net
VBA Seleniumdriveで
driver.ExecuteScript ("XXXX")
でonclickをクリックするとモーダルコンテンツが表示されます。
コンテンツ内のXpathをクリックしてもボタンを押すことが出来ないんですが、
SendKeys "{TAB}", Trueで該当のボタンをクリックする以外に
要素を指定してクリックする方法ってありますか?
241:デフォルトの名無しさん
21/04/14 22:43:58.06 bsTwIiw80.net
下記「やりたいこと」のようにhtmlから抽出したいのですが、
下記「前提」があって、どうしたらいいのか分かりません。
なにか方法ありますでしょうか?
--- やりたいこと ---
下記htmlにおいて、"ヘッダ"のすぐ次に存在しているtableタグ内の項目1,2、要素1,2を取得したい
--- 前提 ---
①"ヘッダ"は特定できる
②tableは特定できない
・tableのidや要素から特定できない
・tableの数から特定できない(取得したいtableが何個目なのか分からない)
--- html例 ---
・・・
<h2>ヘッダ</h2>
<table>
<tr><th>項目1</th><th>項目2</th></tr>
<tr><td>要素1</td><td>要素2</td></tr>
</table>
・・・
--- プログラム例(Microsoft Internet Controls、Microsoft HTML Object Libraryは参照設定済み) ---
Dim objIE As New InternetExplorer
objIE.Navigate "URLリンク(***")
Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
For Each obj In objIE.Document.getElementsByTagName("h2")
If InStr(obj.innerText, "ヘッダ") > 0 Then ヘッダは見つけることができるが、この後どうしたらいいのか・・・
End If
Next obj
242:デフォルトの名無しさん
21/04/14 23:08:27.54 mIFbuL/UH.net
>>240
<HTML>タグか<BODY>タグで全体のソースを取り込んで、あとは文字列として処理
243:デフォルトの名無しさん
21/04/15 01:36:52.92 E+h/Uieza.net
VBAでやる意味あんの?
244:デフォルトの名無しさん
21/04/15 02:03:12.55 Un6DIa9Z0.net
>>242
ありがとうです。
もう少し考えます。。
245:デフォルトの名無しさん
21/04/15 06:20:29.14 5JoH8OD60.net
>>240
jQuery なら、2重ループで、
<h2 id="id-1">ヘッダ</h2>
<table><tbody>
<tr><th>項目1</th><th>項目2</th></tr>
<tr><td>要素1</td><td>要素2</td></tr>
</tbody></table>
<table><tbody>
<tr><th>項目3</th><th>項目4</th></tr>
<tr><td>要素3</td><td>要素4</td></tr>
</tbody></table>
$( function ( ) {
let table = $( '#id-1' ).next( ); //次の兄弟要素
// table > tbody > tr を、1行ずつ処理する
$( table ).children( ).children( ).each( function ( index, row ) {
// 1列ずつ処理する
$( row ).children( ).each( function ( index_2, col ) {
console.log( `${ index }行 ${ index_2 }列`, col.textContent );
} );
} );
} );
出力
0行 0列 項目1
0行 1列 項目2
1行 0列 要素1
1行 1列 要素2
246:デフォルトの名無しさん
21/04/15 06:53:10.31 r2UxJQfIM.net
>>244
VBAの構文に変換してくれ
247:デフォルトの名無しさん
21/04/15 11:25:51.10 c60l0/FJ0.net
>>244
VBAに対してHTMLの集約やメソッドチェーンが使える言語をぶつけてくるのは卑怯だと思うの
248:デフォルトの名無しさん
21/04/15 12:05:58.59 nvZZu+k0a.net
スクリプトぐらいなら良くねの
249:デフォルトの名無しさん
21/04/15 12:18:14.12 ivOr0/mk0.net
>>244
結局総当りか
まあそうだよね
250:デフォルトの名無しさん
21/04/15 16:07:09.80 MUSbI6ab0.net
質問です。
今は下記のようなコードとvlookupを組み合わせて連続で請求書を印刷しています。
一つのジョブにまとめて印刷するにはどのようにしたらよいでしょうか?
Sub 連続印刷()
Dim i As Integer
Dim LastRow As Integer
Worksheets("請求書").Select
With Worksheets("データ")
For i = 3 To 5
Range("d1").Value = .Range("A" & i).Value
Range("n1").Value = .Range("A" & i + 1).Value
i = i + 1
ActiveSheet.PrintOut
Next
End With
End Sub
251:デフォルトの名無しさん
21/04/15 17:29:43.21 c2wrGnlaM.net
>>249
vlookup部分もVBA化して組入れれば一つのJOBに出来るよ
252:デフォルトの名無しさん
21/04/15 17:46:43.97 BAka9uDVM.net
>>249
3つぐらいなら請求書シートを必要分コピーして各々値を入れて複数シートを一気に印刷するしか思い付かない
253:デフォルトの名無しさん
21/04/15 17:53:55.45 c2wrGnlaM.net
請求書シートも複数有るなら、それをFor Nextで繰り返すぐらいだろうね
254:デフォルトの名無しさん
21/04/15 19:09:26.62 pI0uqt930.net
UI Automationの質問てここでいいの?
VBAでゆっくりムービーメーカー4のキャラクター切り替えをやりたいんだけど、
うまくいかず。
キー操作をWindowsに送ることでごまかしている。
”追加してシーク”ボタンを押すだけならこんな感じでできるんだけど、
Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "追加してシーク")
Set elmYukkuri_Button = elmYukkuri_timeline.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = elmYukkuri_Button.GetCurrentPattern(UIA_InvokePatternId)
ボタンじゃなくてコンボボックスでボタン内容が切り替わるときはどうすればいいんだろう?
255:デフォルトの名無しさん
21/04/15 21:08:32.60 fGNDJEoP0.net
>>249
俺もそれ使ってたわ
100セットとか印刷するとコピー機占領するからすごい迷惑なんだよね。
色々あって、vbaは逆に使わなくなった
方法はは>>251にかなり近くて、
・シートを連番で用意しておく
・シート名は「3」~「5」
・vlookupのキーはシート名にする
Range("d1").Valueには、 .Range("A" & シート名).Value
Range("n1").Value には、.Range("A" & シート名+ 1).Value
のように、予めシート名を引っ張ってvlokup部分は完結させておく
後はシート「3」~シート「5」を選択し、印刷するだけ。ジョブは一つになるし、vbaも不要になる
シート内容が変更になる時は、vbaを使って連番のシートを再作成すると良い
256:デフォルトの名無しさん
21/04/15 22:20:13.95 8+4wzY1VH.net
直接印刷せずPDFにすればいいじゃん
PDFなら大量のファイルを1回のジョブで一気に印刷できるぞ
257:デフォルトの名無しさん
21/04/15 22:56:26.48 fGNDJEoP0.net
>255
PDFに出力する時はvbaで制御できないんじゃ
258:デフォルトの名無しさん
21/04/15 23:42:15.25 rzqCvIH40.net
>>253
ここで良いけど、
UIAutomationとムービーメーカー4両方知ってるレアな人じゃないとわからないと思うぞ。
俺は前者しかわからんからあてずっぽうで言うけど、
FindFirstじゃなくてFindAllして中身を調べれば良いんじゃないの?
259:デフォルトの名無しさん
21/04/16 04:48:18.88 aO0hqHGi0.net
>>257
とりあえずごまかしながら作ったのがこんなやつ
URLリンク(youtu.be)
ソースとかほしい?
260:249
21/04/16 19:03:44.09 yYdNvwCc0.net
様々なご提案ありがとうございます。
シートを増やして行くやり方にしようと思います。
261:デフォルトの名無しさん
21/04/17 04:28:55.40 aiLxsK7Md.net
質問です。変更したセルに色をつけたいと思っており、調べたところ変更履歴の使用や色を変更するマクロ(private sub~)は出てきました。
それに加えて、その色変更をその日だけ有効にすることは可能ですか?
例えば、
4/17 A1の値 1
1→2に変更すると色も変更
4/18 A1の値 2 白に戻っている
2→3に変更すると色も変更…
といった感じなんですが。。。
262:デフォルトの名無しさん
21/04/17 04:47:34.80 5JzvmzAs0.net
If Today()="2021/04/17" Then
Range("A1").Interior.Color = 256
~とか条件加えればいいんじゃね
263:デフォルトの名無しさん
21/04/17 05:37:32.98 HGZEZM9x0.net
こんなこと出来ますか?
URLリンク(i.imgur.com)
A列に予め色の見本が、C列に数値を代入していく。
C列に数値を代入したら、そのセルの背景色をA列の色の見本と同じ色にしたい。
A列め色の見本は20色ぐらいを想定。
条件付き書式を使おうと思ったけど、20色も増えたらルールも20個書かないといけないので、ちょっとなえた。
264:デフォルトの名無しさん
21/04/17 06:27:08.23 fydw5HpOa.net
>>261
これを、ワークブックオープンにいれておけばよいよ
265:デフォルトの名無しさん
21/04/17 06:33:53.75 fydw5HpOa.net
>>262
セルに入力されたらシートチェンジというモジュールがあるはずなので
それをさがしてその中でいろいろな処理をすればよいよ
266:デフォルトの名無しさん
21/04/17 06:44:21.86 iZq5P4oj0.net
>>262
出来る出来ないで聞かれたら出来ると答えるよ。
方法は?と聞かれたらワークシートチェンジイベントをシートモジュールに付け足して、引数にはRangeが入ってくるから
その範囲にC列が被っていたらそこの数字みてA列の該当する数字の色拾って来て着色する。
イベントの範囲とC列が被っているかどうかは計算でも求められるけど、今回はセル値も見ることになるからFor Each でイベントでとったRangeを
ぐーるぐる回してC列かどうかを見ればいいと思うよ。
その際、イベントの引数の範囲もRangeだけど
Eachの後に書くCellに該当する変数の型もRangeになることに気をつけて。
実はCellって型はRangeなんだよ。
267:デフォルトの名無しさん
21/04/17 07:03:20.22 jQb3oNGZ0.net
>>265
こういう回答する人って知識ひけらかしたいだけに見える
簡潔答えられないのかね
268:デフォルトの名無しさん
21/04/17 07:05:28.63 gHXBJYD60.net
まあ条件付き書式のほうがスッキリしていいと思うけどな
269:デフォルトの名無しさん
21/04/17 07:19:08.72 iZq5P4oj0.net
>>266
そうなんだ
最近ヒマしててちょっとひけらかしたい部分もあったんだ。
でも作る時のポイントになること押さえてるからいいだろ?
本当は手元に環境があればソース貼りゃいいんだけど。
270:デフォルトの名無しさん
21/04/17 07:26:58.07 fydw5HpOa.net
ふつうはシート・チェンジのモジュールのなかで
target.アドレスやtarget.valueで値を取り出すのじゃないのか
なにをやってるのかよくわからんぞ、
271:デフォルトの名無しさん
21/04/17 07:28:09.89 5JzvmzAs0.net
>>262
どういうシステムにしたいかがいまいち分からん
まずC列の複数のセルに0~5の整数をまとめていくつも代入して、
その後に数字入れたセルの背景色をまとめて変えたい?
272:デフォルトの名無しさん
21/04/17 07:30:13.57 jQb3oNGZ0.net
口だけ出すのもなんなので一応作ってみた
Sheet1モジュール用
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Alea数値 As Range
Set Alea数値 = Range("C4:C9")
If Intersect(Target, Alea数値) Is Nothing Then Exit Sub
Dim AleaColor As Range
Set AleaColor = Range("A4:A9")
Dim Rng As Range
Dim Color№ As Long
For Each Rng In AleaColor
If Rng.Value = Target.Value Then
Color№ = Rng.Interior.Color
Target.Interior.Color = Color№
Exit Sub
End If
Next Rng
End Sub
273:デフォルトの名無しさん
21/04/17 07:46:50.44 fydw5HpOa.net
>>262
てさあ、なかなか賢いとうか
赤や黄色のセルを取り出す、⬅これできないだよな
どこかのセルと同じ色にするならできるだけど
274:デフォルトの名無しさん
21/04/17 07:47:30.68 IoVEY+h40.net
>>271
素晴らしいです。
やりたいことが出来ました。
コメントくれた人にも感謝します。
275:デフォルトの名無しさん
21/04/17 08:50:15.05 xdZBdiobH.net
>>271
いま見返したらAreaがAleaになってるな
276:デフォルトの名無しさん
21/04/17 08:56:18.27 fydw5HpOa.net
エクセルは1600万色もあるからどれが赤で黄色なのかわからない
262のように色見本があって、これが赤です。と決めてくれないと
277:デフォルトの名無しさん
21/04/17 09:08:47.12 lNzUtf8u0.net
>275
EXCEL関係ない
278:デフォルトの名無しさん
21/04/17 12:35:40.75 .net
>>102,103
返信ありがとうございます。
input_str =~ の()内にB2の文字列を貼付して出来ましたが、
input_str =~
input_str =~
と複数行にして試しましたが、複数行は出来ませんでした、どうすれば複数行処理可能になりますでしょうか?
279:デフォルトの名無しさん
21/04/17 20:38:15.19 A+RmKR4F0.net
>>258
いや、ムービーメーカー4がわからないから、貰ってもわからないし。
コンボボックスって未選択の所?
UIAutomationじゃなくてもSendMessageで行けそうな気がするけど・・。
▼が何の文字を指定すればいいのかわからないって意味なら、
やっぱりFindAllで取得して、配列の何番目にそれっぽいのが入ってるか調べればいいと思うな。
280:デフォルトの名無しさん
21/04/17 20:55:43.60 IoVEY+h40.net
>>278
1日がかりでググりまくりの苦労と試行で出来た。
'コンボボックスを開いて折りたたむ
Dim ptnExpand As IUIAutomationExpandCollapsePattern
Set ptnExpand = elmYukkuri.GetCurrentPattern(UIA_ExpandCollapsePatternId)
ptnExpand.Expand
ptnExpand.Collapse
'コンボボックスの中身をセルA3に書き出す
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ListBoxItem")
Set elmsYukkuri = elmYukkuri.FindAll(TreeScope_Children, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "TextBlock")
For i = 0 To elmsYukkuri.Length - 1
Set elmYukkuri = elmsYukkuri.GetElement(i).FindFirst(TreeScope_Children, iCnd)
Cells(i + row_セリフ開始, 1).Value = i
Cells(i + row_セリフ開始, 2).Value = elmYukkuri.CurrentName
Next
281:デフォルトの名無しさん
21/04/18 09:49:47.16 AhVY6Zxk0.net
し
282:デフォルトの名無しさん
21/04/18 09:56:40.54 AhVY6Zxk0.net
Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("A1:A2")) Is Nothing Then
Exit Sub
End If
ClearDates
UpdateDates
End Sub
Sub ClearDates()
Range("A4:A999").Clear
End Sub
Sub UpdateDates()
If IsDate(Range("A1").Value) = False Or IsDate(Range("A2").Value) = False Then
MsgBox "日付を正しく入力してください"
Exit Sub
End If
Dim d As Date, endDate As Date
d = Range("A1").Value
endDate = Range("A2").Value
Dim y As Long
y = 4
Do While d <= Range("A2").Value
Cells(y, 1) = d
d = d + 1
y = y + 1
Loop
End Sub
日付間の日にちが自動で打ちあがるようにしたんですけど
めちゃくちゃ重くてパソコンが固まってしまいますご教授ください
素人みたいな質問ですいません。
283:デフォルトの名無しさん
21/04/18 10:09:03.12 CdbHG8Q+0.net
>>281
Changeイベントをする時は、
処理の前で
Application.EnableEvents=False
処理の後で
Application.EnableEvents=True
が動くようにしないと延々Changeイベントが動いて重くなる
284:デフォルトの名無しさん
21/04/18 10:09:19.29 a83COmqy0.net
>>281
むしろそれでプロだったらびびるけど・・・
Worksheet_Change()はワークシートの内容が変わった時に発火する
Worksheet_Change()→ClearDates()→Worksheet_Change()→UpdateDates()→Worksheet_Change()→・・・
多分無限ループになっている
こういう時はイベントを無効にしておけば無限ループにならない
Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
'内容
object.EnableEvents = true
endsub
285:デフォルトの名無しさん
21/04/18 10:09:41.04 a83COmqy0.net
すまん、Application.EnableEvents = Falseだった上に遅かった
286:デフォルトの名無しさん
21/04/18 10:53:16.67 AhVY6Zxk0.net
すばやい返答ありがとうございます
少し早くてびっくり
VBAははじめて2年ぐらいです
5年後ぐらいにプロになれたらいいな
Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
上記を先頭2行と置き換えて
object.EnableEvents = true
endsub
↑この2行は最終行に書けばいいのですか?
素人ですいません!
287:デフォルトの名無しさん
21/04/18 11:21:49.65 JCpiu5BAH.net
>>285
直す部分だけ書くと、こう
Private Sub Worksheet_Change(ByVal target As Range)
Application.EnableEvents = False
If Intersect(target, Range("A1:A2")) Is Nothing Then
Exit Sub
End If
ClearDates
UpdateDates
Application.EnableEvents = True
End Sub
288:デフォルトの名無しさん
21/04/18 12:11:13.84 ORj5XeNB0.net
>>285
ごめーん、object.EnableEvents = false は間違いです
>>286さんが正しいです
289:デフォルトの名無しさん
21/04/18 14:57:21.70 AhVY6Zxk0.net
先生たちありがとうございます!
新設丁寧頭もいい
290:デフォルトの名無しさん
21/04/18 14:58:49.68 AhVY6Zxk0.net
自分の力で解決できるようにがんばります!
291:デフォルトの名無しさん
21/04/18 16:07:16.06 c/Nu40gb0.net
>>281
それコピペして動かしてみたけど全然重くなかったよ
1900年から今日までにしても4秒くらい
これで固まるのは別の原因があると思う
その場所以外にとても複雑な計算式があって
Cells(y, 1) = d の度に計算して重くなってるとか
そうであれば計算を手動に変えて最後に自動にするとか
セルじゃなくて配列にdを入れて最後に一回だけ出力するとか
UpdateDates()を1行ずつ動かせばどの行で固まってるか分かると思うよ
292:デフォルトの名無しさん
21/04/18 16:21:48.14 n1x9QJALa.net
>>290
それはChangeイベントで検証しましたか?
293:デフォルトの名無しさん
21/04/18 19:37:56.63 Z7m7Dr1xd.net
>>261
ありがとうございます。試してみます。
294:デフォルトの名無しさん
21/04/18 20:47:27.38 c/Nu40gb0.net
>>291
検証しました。
対象セルの書き換えはないから普通は無限ループにならないと思うけど
環境によって何か違うのかな?
とにかく一行ずつ動かしてどこで固まるか調べた方がいいと思います。