Excel VBA 質問スレ Part70

■ このスレッドは過去ログ倉庫に格納されています
2021/03/18(木) 22:08:43.71ID:jtngtgXU0
!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
2デフォルトの名無しさん (ワッチョイ 013d-drwQ)
垢版 |
2021/03/18(木) 22:33:41.83ID:e6JgDwDC0
教えて下さい。
あるシートに買物記録があり、日付や購入店、商品名や単価の他に、商品の分類という列があります。
その列には「文具」「食品」「書籍」等が入力されています。

VBAで以下の動作をさせたいです。
 ↓
別シートにあるダウンリストに、選択肢として、この商品分類に入力されている値を設定する。
重複して入力されている値は無視。入力されているすべての「分類」をひとつずつ選択肢にする。
 ↑
これをどう書けばいいのか、教えて下さい。
よろしくお願いいたします。
2021/03/19(金) 02:09:13.85ID:pQtJO8X70
関数でも分類列をMATCHで検索してRow()と不一致なら空白として、それを入力規則にすれば出来そう

VBAでやるなら連想配列使って重複弾いて、かな
2021/03/19(金) 12:08:42.44ID:Efxeclnea
>>2
もう少し個別にどの部分で詰まっているか書いた方がいいんじゃね
2021/03/19(金) 12:19:16.87ID:Rf8ZEH4N0
>>2
ワークシート関数でいいなら

適当なセルに
=UNIQUE(商品の分類が入力された列)
と入力すると重複整理された配列が入力される

プルダウンリストを作りたいセルを選択して「データの入力規則」を選択、
規則をリスト、ソースをさっき作った配列がある列にする
2021/03/19(金) 13:13:27.10ID:LUl3FuSJa
ピボットグラフのRefresh処理が重くて困ってます
汎用的な処理中に停止すべき項目(画面描画、自動計算、イベント、アラート等)は停止させています
元テーブルの行は100程度です

処理を軽くする方法があればご教示願います
2021/03/19(金) 20:19:38.16ID:TXt81ZmU0
>>6
ピボットテーブルの設定で「更新時に列幅を自動調整する」のチェックを外す
2021/03/19(金) 20:23:00.26ID:Rf8ZEH4N0
ググるとそれ出て来るけど、あんまり意味ないよ
って言いつつ効果あったら恥ずかしいけど
2021/03/19(金) 22:16:15.80ID:TXt81ZmU0
初心者にはそのくらいしか教えられん
2021/03/19(金) 22:28:12.63ID:ZGQ0wMm+a
>>7
ありがとうございます

ですが 処理が重くて困っているのはテーブル(ピボットテーブルではない)から作っているピボットグラフなのです

これが重かったりするんですかね…?
2021/03/19(金) 23:06:18.73ID:Rf8ZEH4N0
というか元々のグラフ生成が重いのかマクロが重いのか分からん
普通に更新ボタン押しても重いの?
2021/03/19(金) 23:55:25.74ID:tSoX9T0pa
>>11
普通に手動でも遅いです…
何かピボットグラフの設定によるものならとも思いますが…
2021/03/20(土) 00:13:52.57ID:1HieLmil0
グラフ更新よりも関数で固まってる可能性の方が高いから、
一度全部の関数を削除してみて解決するか確認した方がいいと思う
自動計算切っててもピボット更新時に再計算されてる筈だし
2021/03/20(土) 01:01:30.93ID:7VltWvHha
>>13
ありがとうございます
ワークシート関数は使わず、計算は全部vbaでやっています
関数と言えるのはピボットグラフのグラフ部分だけです
ピボットグラフのグラフ部分の関数が重くなっている可能性が考えられるかも、と思いました
ありがとうございます
2021/03/20(土) 04:43:36.06ID:kQoUW+sA0
すげえなワークシート関数一切使わんでマクロだけでやるとは
2021/03/20(土) 06:51:00.93ID:EyTYq69F0
遅いとか速いとか漠然としているので何秒かかっているかもわからんし
データ量やステップが増えればある程度遅くなるのは当然じゃね
2021/03/20(土) 07:28:18.81ID:/meO8w1y0
2〜3秒でも遅いと思う人もいるしね
2021/03/20(土) 10:08:34.03ID:D1FjuE5r0
VBA使ってんならどの部分でどんだけ時間かかってるか測定すりゃいいだけの話なのになぜしないんだろう
2021/03/20(土) 11:15:44.57ID:Awf5aTeqa
>>18
Refreshのところで3秒かかっています
他処理全部は0.5秒で終わります
2021/03/20(土) 20:35:40.01ID:EyTYq69F0
PCの性能が低いんじゃね
2021/03/20(土) 20:48:09.36ID:kQoUW+sA0
それだ!
パソコンのせい
ゲーミング用買えば全てにおいてスマホ級の速さだ!
2021/03/21(日) 16:59:06.62
5chのスレで1000まで書き込まれたスレを1から1000までコピペしてsheet1に貼り付け
sheet1を特定のキーワードで検索して、書き込まれたレスと返信があったレスを抽出してsheet2に貼り付けしたいです
返信がない場合は空白と入力したいです
アイデアが思い付きません、宜しくお願いします
2021/03/21(日) 17:54:39.86ID:fT/r6tJT0
いつもの
2021/03/21(日) 21:09:20.26ID:aZS3hsKq0
>>6
イベントやアラートって目的も無く停止しない方がいいと思うが
2021/03/22(月) 05:59:51.89ID:B7/s/yNjM
>>22
5chアフィ乙
2021/03/23(火) 06:37:42.10ID:3hKAtAlua
エクセルからhtmlで保存するとき
グラフが1000以上でもできますか
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)を入れようとしてるのですがエラーになります
2021/03/23(火) 17:44:03.01ID:XH4udpo7H
selectionだけでいいんじゃね
2021/03/23(火) 17:59:59.95ID:dulEqDGL0
チャートをセレクトしてるからセルのセレクトが外れてるんだよ
Addchartの時にセレクトじゃなくてオブジェクト変数にセットして
アクティブチャートの行を【変数名】.(以下略)にしてやってみ
変数にセットするときに文頭のSetを忘れないようにな
32デフォルトの名無しさん (ワッチョイ 71fd-ED79)
垢版 |
2021/03/24(水) 18:47:39.00ID:7fnGaRlR0
エラー処理で On Error GoTo を On Err GoTo と書いていて
全く気付かずエラーになって初めて、ラベルに飛ばないので気づきました。
デバッグでは判定しないようですが、これらを事前にチェックで見つけることは
出来ないのですかね?
2021/03/24(水) 19:49:11.93ID:SmPCs0wuM
ヤフーファイナンスの仕様が変わった?のか、
当該銘柄のページから
Set FR = rngResult.Find(What:="出来高*", LookAt:=xlWhole)
みたいな感じで出来高取得してたのが
できなくなった

どこを直せばいいのかわからん
もしかしてこのやり方では
取得できなくなった?
2021/03/24(水) 19:50:41.85ID:jjB0JAKeM
>>32
まともなコードなら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 = ○○ とあとで系列名を変えるのが良いのでしょうか?
2021/03/24(水) 20:32:05.20ID:HXzqnMHf0
個人的には系列名変える方が好き
2021/03/24(水) 21:05:50.71ID:N9nRIl9KH
>>32
インタプリタは事前に文法チェックをしないのが普通ですから、そういうのはインタプリタには無理でしょう‥‥
2021/03/24(水) 22:00:53.02ID:T3engiTo0
いまどき純粋なインタプリタなんてそうそうないけどな

一応VBAは事前にコンパイルチェックできるが、>>32
On 変数 GoTo xxっていう文法があってそれにそっているからエラーにならない
そして変数宣言を強制しても、Errって組み込みオブジェクトが宣言なしで使えるという罠

なんかコード分析するようなツールでもあれば検出できるかもしれんが、まあ標準の範囲じゃ無理だな
2021/03/24(水) 22:54:43.12ID:/MIQ1K/L0
>>35
元データと選択された表示用データを別にすればいいんじゃね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況