VBAなんでも質問スレ Part2 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2015/05/21(木) 10:52:44.71ID:KLv0vQmm
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK

ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください

VBAを開発環境としていろいろ作っちゃいましょう

前スレ

VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/

関連スレ

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/

Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/

VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/

Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/
2017/02/23(木) 16:07:14.86ID:xPy6pfR0
今までは長い時で1〜1.5秒程止まっていました
>>268さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います
たくさんご意見頂きありがとうございました
2017/02/23(木) 16:14:41.52ID:5OVH7aZj
>>269
> If TypeName(Selection) <> "Range" Then Exit Sub
だよ
2017/02/26(日) 14:44:16.79ID:nMuhJunv
エクセルのマクロでも質問大丈夫でしょうか?
名前と同じファイル名の画像を名前セルの隣に貼り付けるプログラムなんですが
Sub ボタン1_Click()
Const n As Long = 2
Dim i As Long
Dim x As Double
Dim s As String
Dim t As FileDialog
Dim m As VbMsgBoxResult
With ActiveSheet
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6
Set r = .Cells(i, 3).MergeArea
s = "D:\画像\1\" & .Cells(i, 2).Value & ".jpg"
Dir Application.Path
With .Pictures.Insert(s).ShapeRange
.LockAspectRatio = msoTrue
x = Application.Min(r.Width / .Width, (r.Height - n) / .Height)
.Width = .Width * x
.Left = r.Left + (r.Width - .Width) / 2
.Top = r.Top + (r.Height - .Height) / 2
End With
Next
End With
End Sub
この"D:\画像\1\"の部分をフォルダ選択できるようにしたいので
Dim s As String
  Dim t As FileDialog
Set t = Application.FileDialog(msoFileDialogFolderPicker)
s = "t" & .Cells(i, 2).Value & ".jpg"
としたら「1004 PicturesクラスのInsertプロパティを取得できません。」と実行できません
どうしたら"D:\画像\1\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。
2017/02/26(日) 16:00:22.84ID:nt1S72uw
>>272
Dim s As String
Dim t As String
With Application.FileDialog(msoFileDialogFolderPicker)
  If .Show = False Then Exit Sub
  t = .SelectedItems(1) & "\"
End With
'途中省略
s = t & .Cells(i, 2).Value & ".jpg"

じゃないかな?
あと
元コードもそうだけど
フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ
同じエラーになるぞ それとも絶対 あるのが 確定してる?
2017/02/26(日) 16:45:49.33ID:nMuhJunv
>>273
大変ありがとうございます!
ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか?
ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます
よろしくお願いします
2017/02/26(日) 16:51:45.39ID:nt1S72uw
>>274
ん? そこは分ってるとおもたよ
フォルダ選択部分は Forループの外だよ
↓ここねw
With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = False Then Exit Sub
 t = .SelectedItems(1) & "\"
End With
2017/02/26(日) 16:57:59.74ID:nMuhJunv
>>275
あっ!できました!ありがとうございます!助かりました!
277デフォルトの名無しさん
垢版 |
2017/03/06(月) 23:29:36.96ID:QCgyLcj6
こんにちは。

パワーポイント2013のVBAについて分かる方教えて下さい。

やりたいことは、グラデーションの塗りつぶしがあるシェイプのGradientStopsのそれぞれの色を変化させるアニメーションの方法です。

2013ではできないけど2016ではできる等の情報もあればお願い致します。
2017/03/08(水) 21:50:45.20ID:DO0ivfK5
vbaだけでhttpサーバーって出来る?
2017/03/08(水) 23:04:04.36ID:Tpob7EG8
俺が手を下すまでもないな
答えてやれよ
>>280
2017/03/09(木) 01:39:01.40ID:UFk6xx1O
VBAだけってのが
外部コントロール使用禁止
API呼び出し禁止
なら不可能です
2017/04/09(日) 15:56:17.26ID:9WwYB+FH
VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、

セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか?
2017/04/09(日) 16:02:56.39ID:9WwYB+FH
ちりも積もればの話ですが
足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと
同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか?
2017/04/09(日) 16:09:57.30ID:Lq/WJuQk
>>281
セルでいいんじゃないの?
ただそのIOは配列アクセスを使うべき
ループで1セルづつ読み込むとかがナンセンス
2017/04/09(日) 16:14:42.36ID:K8MFArI9
>>281
説明がいまいち分かりにくい。
次回ってのは何時のことを言ってる?
グローバルな変数じゃダメなの?
次にそのブックを開くまで保持したいならセルってのも分かるんだが。
で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。
2017/04/09(日) 16:27:32.06ID:9WwYB+FH
>>283
ありがとうございます。
>配列アクセス
勉強してみます。

>>284
Bookを閉じずに他からデーターを取り込み再度VBA実行を繰り返します。
>グローバル変数
>CustomDocumetProperties
勉強してみます。

グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。
2017/04/09(日) 16:44:07.10ID:9WwYB+FH
>>284
プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね!
今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。
2017/04/09(日) 19:39:59.08ID:9WwYB+FH
Public変数もしくは通常の変数の指定数の限界はあるのでしょうか?
問題なく動くレベルは何個ぐらいでしょうか?

50個
100個
1000個
10000個でも平気だっり?
実は
100000個以上でも問題ないとか?
2017/04/09(日) 19:51:50.86ID:0T9WQSVM
>>287
使えるメモリは決まってる
変数の個数じゃなくてそれぞれのバイト数の合計
2017/04/09(日) 23:55:43.90ID:K8MFArI9
>>287
グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。
PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。
2017/04/10(月) 02:47:06.39ID:AhmZ51rM
日曜の午後からずっとVBAを書いてるけどまだおわらね〜
てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w
2017/04/10(月) 04:05:13.85ID:sRLMXvmn
>>287
しかもEndやErrorで抜けたら破棄されるという罠
2017/04/11(火) 00:40:18.97ID:egN7ZnVO
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って
一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?
2017/04/11(火) 10:41:22.79ID:Ei1BFwyD
>>292
数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。
2017/04/11(火) 11:01:45.96ID:o/k96Ri6
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ
それぞれに異なった知識と才能が必要となりますので
2017/04/11(火) 11:03:15.94ID:6dnWkPrh
>>291
End Subの行にブレークポイント、これ
2017/04/12(水) 22:41:46.94ID:iuenojzm
パブリック変数で

1000個
10000個でも平気だっり?

とかどんな拷問なんだよw
2017/04/20(木) 23:26:11.80ID:92wBssf5
テストしてみたがパブリック変数500個は問題なく動いた。
もっと使ってる人いる?
2017/04/21(金) 19:40:41.67ID:TpPjDerb
いらない
2017/04/21(金) 21:22:06.10ID:BWuBR5xw
変数の一部を変数にする事は出来ないのでしょうか?(代入
とかではなく)
たとえば↓はイメージですが変数名の箇所を文字列をつなぎ合わせる時と
同じように変数をわりあてられないのでしょうか?(以下は動きませんがphpではこれができます。)
dim aaa1
dim aaa
dim no
dim bbb

aaa1=例文1
aaa=aaa
no=1

aaa & no = bbb

msgbox bbb

結果は「例文1」 と表示されますみたな、、 
2017/04/21(金) 21:28:31.62ID:BWuBR5xw
>>299
最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」


とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。
2017/04/21(金) 22:10:11.53ID:9tskJEPF
>>300
aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する
2017/04/21(金) 22:18:30.36ID:TpPjDerb
>>300
Dictionaryのkeyにすれば良いんじゃね
2017/04/21(金) 22:25:23.50ID:9tskJEPF
CollectionよりDictionaryだな、確かに
2017/04/21(金) 23:24:44.93ID:3F+Ljh12
そういう質問、初心者によく聞かれるわ
普通は配列を使えと教えるもんだが
2017/04/22(土) 06:16:50.97ID:zUhE/Mll
>>302
>>301
ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。

phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。
306299
垢版 |
2017/04/22(土) 08:27:20.54ID:zUhE/Mll
>>300
>>301
>>302
>>304

aaa1=「状況に応じて変化する数値1」
aaa2=「状況に応じて変化する数値2」
aaa3=「状況に応じて変化する数値3」


すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?
2017/04/22(土) 08:53:12.92ID:MM2jcjjz
>>306
変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。

というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。
2017/04/22(土) 11:27:30.44ID:6RXuRSFv
>>306
Dictionaryのvalueは変更可能
309299
垢版 |
2017/04/22(土) 15:29:06.19ID:zUhE/Mll
>>308
>>307
理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。
2017/04/22(土) 20:43:48.30ID:zUhE/Mll
Dim dic As New Dictionary
Dim i As Integer

dic.Add "キー1", "アイテム1"
dic.Add "キー2", "アイテム2"
dic.Add "キー3", "アイテム3"

Dictionaryで指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、
グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?
2017/04/22(土) 22:48:51.75ID:AOzJBbd9
>>310
プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない

でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う
2017/04/22(土) 23:30:15.48ID:zUhE/Mll
>>311
ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。
2017/04/23(日) 05:30:19.61ID:t5ve42Di
>>312
Dim dic As New Dictionary
の宣言を何処でしているかによるんじゃね?
2017/04/23(日) 10:16:09.39ID:wfwXXeKO
>>312
標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。
2017/04/23(日) 16:51:51.75ID:fs201BJ1
>>311
引数に渡すってのを忘れてるぞ。
一番使われてるんじゃないか?
2017/04/23(日) 17:11:32.92ID:yvJyPXpi
>>315
何の引数に渡すことを指してるのかな?
2017/04/23(日) 18:02:04.26ID:fs201BJ1
>>316
プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。
2017/04/23(日) 18:27:09.16ID:yvJyPXpi
>>317
>>310を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが

まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど
2017/04/28(金) 17:33:41.10ID:krqKI6DB
超既出FAQですな。

『Public 宣言された変数の有効期間』
https://support.microsoft.com/ja-jp/help/408871

簡単に言うと、メソッド実行中以外はいつでもpublic変数はクリアされうるから、値が残っていることを期待したマクロを書くなってこと。
2017/04/28(金) 19:14:11.69ID:AZuqyiJa
>>319
俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。
2017/04/28(金) 22:13:43.74ID:A3VkBONm
Publicな静的変数は使わない。
エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利
2017/04/29(土) 02:16:02.91ID:2iGvQ1xG
>>321
いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。
2017/05/25(木) 20:51:55.45ID:yS9f0RVc
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。
このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。
2017/05/25(木) 21:07:30.77ID:JTnnq+Q0
>>323
スコープ
普通にCallで呼び出せる場所にないと実行できないのは、どの方法でも同じ
2017/05/26(金) 00:03:34.69ID:Fw61rXsb
>>324
ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?
2017/05/26(金) 23:19:52.51ID:Fw61rXsb
>>325です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜
327デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:02:56.92ID:bd1ggU41
特定の文字が含まれているセル(複数ある)を検索し、

検索されたセルを含む行全体(Entirerow)を同時選択する方法

以上お願いします。
328デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:06:49.56ID:bd1ggU41
その文字を含むセルを、行ごと削除したり、行ごとコピーしたりと、いろいろしたいので質問致しました。
2017/06/05(月) 21:25:48.60ID:nSGQpg3a
鮮やかな丸投げっぷりにワラタ
作成依頼OKな Excel VBAスレと間違えてない?
2017/06/05(月) 21:31:47.51ID:tRFV5HQ5
>>328
とりあえず、複数行を選択するところをマクロの記録で見てみたら?
ctrlキー押しながら選択するのとshiftキーを押しながらのとで。
2017/06/05(月) 21:41:12.12ID:jKyX/qwq
検索対象のセル範囲でForループを回す
セル値に特定文字を含むセルが見つかる度にEntireRowを取得して変数に入れるかUnionで選択対象の範囲をマージしていく
ループ終了後にSelectする
以上
332デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:45:35.27ID:epzJZZwH
>>327
Ctrl+Fで検索しろやボケナス
ちゃんと行選択までしてくれるぜ
333デフォルトの名無しさん
垢版 |
2017/06/05(月) 22:37:03.17ID:bd1ggU41
ごめんなさい、質問者です。
ここじゃなかったのですね。上に上がったやり方でできそうなのでやってみます。ありがとうございます
2017/06/06(火) 05:49:03.11ID:tznXutzN
色々細かい条件でどんなコードが効率いいか、変わってくるでしょ。

例えばそのセルがあるのは、特定の行だけとか、検索文字列はセルに完全一致なのか含まれるのか、など。
2017/06/06(火) 09:11:47.41ID:YhE+Nuz8
331だが、同じ行に該当セルが複数ある場合は無駄が生じるな
実現したい機能次第だが、工夫が必要かもな
336デフォルトの名無しさん
垢版 |
2017/06/07(水) 19:31:10.77ID:e13xfCG0
はじめまして。以下2点、教えていただけると幸いです。
環境は、OS:Windows7, Excel2010です。よろしくお願いします。

1.プルダウンの初期値設定
セルA1にりんご、A2にバナナ、・・・のようにA列にある項目をプルダウンで選択したいです。
このとき、「A列のj行目(パラメータ選択可能)を初期値にしたプルダウンをB1に設置する」VBAのコマンドを教えていただきたいです。

2.ファイル名の変更
aaa.txtというファイルをデスクトップに出力するマクロを作れました。
このマクロ実行後、再度実行するとaaa(2).txtのファイルを、再度実行するとaaa(3).txtのファイルを出力・・・
このようなVBAのコマンドを教えていただきたいです。
2017/06/07(水) 21:49:32.12ID:nqbSOdK9
>>336
コマンドはありません
2017/06/07(水) 22:23:27.64ID:L3ua+fDn
>>336
txtファイルをデスクトップに出力っていう日本語の破壊力がやべぇ
2017/06/08(木) 05:33:24.44ID:1DKX/Vru
>>336
1
・B1セルを選択してからマクロの記録を実行
・入力規則でリストを選択にリストの内容でA列を選択する
・マクロ記録の終了をする
・できたコードを修正してA列の任意のセルをデフォルトにするように変更する

2
・デスクトップにaaa.txtが存在するかチェックする。
・存在しない場合はaaa.txtを作成して終了。
・存在する場合はDo~Loop中にデスクトップにaaa(i).txtが存在するかチェックする
・存在する場合はiをカウントアップして次のループ
・存在しない場合はそのiを使用してaaa(i).txtを作成して終了。
2017/06/25(日) 17:10:56.20ID:/fEFwdln
A1セルに =NOW()-TODAY() と入力すると
現在時刻が表示されますが。

MsgBox Range("a1")
とすると 0.0110212・・・と言ったような数値が出ます。

Dim now As Date 
now=Range("a1")
と型を指定した変数に格納してやると 
MsgBox now で 21:49:32 といった一般的な時間表記を示せますが、

変数化を省略して
MsgBox Range("a1")〜に補足コードを書くなどで同じ処理を実現する方法は無いのでしょうか?
2017/06/25(日) 17:20:36.10ID:A4A49pvi
MsgBox Range("A1").Text
とか
MsgBox Format(Range("A1"), "hh:mm:ss")
とか
2017/06/25(日) 17:26:03.97ID:/fEFwdln
>>341
なんと!!
変数をだらだら定義すること無く綺麗さっぱり解決できました!ありがとうございました。m(_ _ )m
2017/07/17(月) 17:20:20.62ID:7pjXcMGR
プロシージャの中で1回しか使わないのに、わざわざ変数にするやつとかいるよね。(しかもハンガリアン記法で)

100行に満たない程度のコードなら、Withステートメント使ったほうがむしろ可読性は上がる。
2017/07/17(月) 17:25:26.05ID:l3sSLpQS
マシンパワーが貧弱だった大昔ならともかく、今時はリソースを気にする必要なんてないんだから、可読性を最優先で記述するべきだよ。
2017/07/23(日) 22:54:52.46ID:EbUz/UVB
>>343
ああ、俺だ。
Ubound(配列)とか、For〜Nextの中で何回も実行すると、
なんか遅いような気がして、一度変数に入れちまう。
2017/07/24(月) 03:07:48.10ID:/3vdoRrW
>>345
何回も実行するなら変数に入れたほうがいいんじゃね?
2017/09/01(金) 23:04:37.73ID:RmCwgyLh
>>345
(1)
For I1 = 1 to UBound(xxx)
For I2 = 1 to UBound(xxx)
(2)
J=UBound(xxx)
For I1 = 1 to J
For I2 = 1 to J

普通に考えて本のチョット早いと思われますが、記述の労力ほどじゃない。
他の方の書いてますが、今は、処理速度が物凄く早くなっています。
気にしなくていいと思います。
ただし、私はEXCELでVBAを書くのですが、シートのセルに書き出すと物凄く遅くなる。
VBAの配列とかメモリーならばほとんど気にしなくていいです。
ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
2017/09/02(土) 08:26:52.52ID:tqo/3wkP
>>347
> ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
基本中の基本だからいちいち書かなくてよろし
2017/09/05(火) 10:53:29.80ID:WmSrV0rS
アノニマスに入会したいんですがVBA知ってるだけで入れますか?
あと入会ってどうやんの? スーツ着て履歴書持って事務所に面接に行くの?
350デフォルトの名無しさん
垢版 |
2017/09/05(火) 12:25:17.40ID:P2jRu54V
たまにハローワークに求人出てるから行ってみれば?
2017/09/12(火) 02:10:43.27ID:2wFcaigK
超初心者です
同じブック内の複数のシートにある顧客データをUserFormを用いて(検索するイメージ)抽出し、別のシートへ出力するコードを書きたいのですがいまいちわかりません。
大変困っているのでヒントをくださればありがたいです。
2017/09/12(火) 02:30:21.88ID:U3/YorLf
>>351
超初心者には無理です
パソコン教室に通ってせめて初級をクリアしてから質問してください
2017/09/12(火) 04:10:40.96ID:2wFcaigK
>>352
返信ありがとうございます
Excel自体触ったことない超初心者ですが頑張っているところです( ??? )
2017/09/12(火) 08:28:28.15ID:GFFccSR9
>>351
自称初心者がどこでUserFormとか覚えたの?
まずはシート上でやってみようね
355デフォルトの名無しさん
垢版 |
2017/09/12(火) 12:27:40.35ID:7XJfZGpJ
どこで覚えようとお前の知った事じゃねえだろw
なんだこのバカはwww
2017/09/12(火) 13:06:30.39ID:N1ygkJfx
>Excel自体触ったことない超初心者

ユーザーフォームを作ったことはあるのか?
 無けりゃ、この時点でやろうとしていることはもう無理

VBAはほんの少しでも書いたことはあるのか?
まぁ最初は>>354の言うようにシート上で実現して、それをユーザーフォームにもっていくのが順当
というか触ったこと無いって時点で釣り確定
2017/09/12(火) 16:38:53.70ID:2wFcaigK
VBA参入門書とネットの知識を詰め込みました。
Excel初心者は本当です。友達に教えてもらいつつやっています。気分を害された方、すみません。
>>356さん非常に分かりやすいです。
二日間くらい最初からコードを書こうとしてもがいていましたが、マクロの記録が使えそうな気がします。
そのコードをいじってボタンで起動するユーザーフォームとくっつけるイメージで挑戦してみます。
2017/09/12(火) 16:41:08.80ID:2wFcaigK
>>354さんもありがとうございます!参考&励みになります
2017/09/12(火) 20:34:49.57ID:/wKXVszF
このスレで一番の基地外が満を持して遅れて登場
2017/09/12(火) 20:51:47.27ID:U3/YorLf
俺のことかな?
2017/09/13(水) 00:17:05.57ID:DHqL5rdG
>>357
ユーザーフォームでその機能を実現する必然性が感じられない
フィルタオプション機能を用いて、検索結果の出力先を新規シートに設定するだけで事足りると思うぞ
2017/09/14(木) 07:47:53.75ID:w7wWQUJY
フィルタオプションとマクロの記録で8割方完成できるな
2017/09/15(金) 10:19:31.10ID:wFtq+9vG
ADOの事でちょっと質問です
変数を定義する時に

Dim wkR as New ADODB.Recordset

ってするんだけど、RecordsetとRecordの違いって何?
364
垢版 |
2017/09/15(金) 10:57:55.87ID:oEkV+GvG
http://matsuri.2ch.net/test/read.cgi/morningcoffee/1472464096/
2017/09/18(月) 06:42:59.71ID:xbe9SlrW
>>361-362 ありがとうございます、簡単なプログラムですが完成して感動しました。
Ifとマクロの記録が万能すぎることを肝に銘じてこれからもがんばります( ??? )
2017/09/18(月) 15:10:56.93ID:7Xxpypu9
>>365
万能過ぎないけどね。
そればっかり使ってる人は永遠に初心者なままだし、色々な面で出来の悪いプログラムになる。
自動生成されたコードのそれぞれの意味を理解して自分なりに書けるようになると上達する。

例えば
Range("B4").Select
Selection.Value=10
のようなコードが生成されると思うけど意味を考えたら
Range("B4").Value=10
で良いとわかるよね。
2017/09/18(月) 20:44:49.78ID:ydCO3vgD
>>363
Recordset オブジェクト
https://msdn.microsoft.com/ja-jp/library/cc364264.aspx
Record オブジェクト
https://msdn.microsoft.com/ja-jp/library/cc364270.aspx
2017/09/18(月) 23:50:59.42ID:XctjYupl
すみませんお力添えをお願いします!
エクセルマクロ(VBA)の件でお尋ねいたしたく思います!
まずグラフの系列名はセル参照で表示させてます
シート名:あいうえお
適用グラフ:グラフ4
系列範囲:A11:Z11
必要なデータ選択は全ての系列で済ませています
あとはグラフで不要な系列を削除したいため、グラフに乗せたくない系列名は”×”になるようにしてます
この系列名”×”をVBAで自動的に削除させることは可能でしょうか?
またグラフは別シートの数値入力をもって自動作成される仕様にしているので、トリガーは設けません
デフォルトだと全部”×”のため(初めは数値データの入力がないため)
数値が入ると正しい系列名に変更されるため、VBAではまず”×”で削除して、”×”以外の系列名に変わったら復活するという構想を練っています
とりあえず、まず”×”を消すコードを見よう見まねで書いてみたのですが動作しませんでした
消すのは良いですが復活させるのも組み込むとなるとちんぷんかんぷんです
是非ともご教示お願いします!
Sub test()
Dim d As Long
Dim i As Long
Dim j As Long
For i = 2 To Sheets.Count
d = Range("A11:Z11").End(xlUp).Row
With Worksheets(i).ChartObjects("グラフ 4").Shapes.AddChart.Chart
.ChartType = xlLineMarkers
For j = .SeriesCollection.Count To 1 Step -1
If .SeriesCollection(j).Name <> "×" Then
.SeriesCollection(j).Delete
End If
Next j
End With
Next
End Sub
2017/09/19(火) 20:55:54.78ID:2SFxAhMD
>>367
説明サイトへのリンク、ありがとう。
取り敢えず、「階層構造のデータ間を移動する手段として」のRecordオブジェクトは使うこと無さそうw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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