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


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

Excel VBA 質問スレ Part65



1 名前:デフォルトの名無しさん mailto:sage [2020/03/17(火) 16:27:20.88 ID:hh8LiIgR0.net]

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part64
https://mevius.5ch.net/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

808 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 01:46:13.78 ID:EGR1WLcw0.net]
受付の行が空白のセルになるまでループしつつ
競技の列が空白になるまでループ??
んん?違うか

GWになのにExcel開いてずっとマクロで悩むとは…とんだステイホームですわ

809 名前:デフォルトの名無しさん (ワッチョイ 877c-mIzA) mailto:sage [2020/05/03(日) 01:55:50 ID:yO9oP2CW0.net]
ここに書かずなぜ動かして試さない…

810 名前:デフォルトの名無しさん (ワッチョイ c7ce-ts7H) mailto:sage [2020/05/03(日) 02:10:58 ID:fR4zqWYb0.net]
>>800
はい、できたよ

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Cells(Rows.Count, 3).End(xlUp).Row - 4 '高さを求める
  cc = Cells(5, Columns.Count).End(xlToLeft).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub

811 名前:デフォルトの名無しさん (ワッチョイ c7ce-ts7H) mailto:sage [2020/05/03(日) 02:15:53 ID:fR4zqWYb0.net]
ごめん
ちょっとだけ修正させて

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Range("C4").End(xlDown).Row - 4 '高さを求める
  cc = Range("B5").End(xlToRight).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub

812 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 03:59:51.25 ID:PK0PPm520.net]
この程度のものを人に聞かなきゃできないようじゃ先が思いやられる
これで職場の50代批判できるのかと・・・・
しかも最初のこれ>>788
もう少し日本語の説明能力上げたほうがいいんじゃないか
君何度もここでいろんな質問してるよね?質問の仕方からして酷すぎる

説明の例1:
この画像で言えばC5からE13の範囲を別シートにコピーしたいです
https://i.imgur.com/Sd2Afas.jpg
コピーしたい範囲は変化します。例えばこの場合はC5からI9までをコピーしたいです
i.imgur.com/MfnIQSU.jpg

説明の例2:
こういう画像をペイントで作る
https://i.imgur.com/u9Vhnj1.jpg




はぁ・・・おれ深夜に何やってんだか・・・

813 名前:デフォルトの名無しさん (ワッチョイ a7ad-ur4w) [2020/05/03(日) 09:15:39 ID:iPr/hZRI0.net]
>>777
ご助言ありがとうございます!
教えていたことの意味を調べながら勉強します。

ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
読んで勉強してるの見かけたので、心がけは見習いたいです。

814 名前:デフォルトの名無しさん (ワッチョイ 87e6-ts7H) mailto:sage [2020/05/03(日) 09:19:57 ID:6v/wuiGx0.net]
> Sheets(Tensu) = "点数"
> Sheets() = "結果シート"

きれいだとか汚いとかいう以前に読む気が失せるな
入門書買ったとか言ってなかったっけ?

815 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 09:20:36.28 ID:2hdRjZho0.net]
>>806
>独学で書いてるVBAが一番「きれい」
>教科書通りで、整理整頓
それはあるかもな

プログラマだとなまじ他言語の知識があるために
トリッキーなことやりだす奴が一定数いるからな
効率が良い面もあるだろうが他人が理解しにくい

816 名前:デフォルトの名無しさん (ワッチョイ 87e6-ts7H) mailto:sage [2020/05/03(日) 09:35:40 ID:6v/wuiGx0.net]
>>804
生血プログラマーなら1行にするべきである



817 名前:デフォルトの名無しさん (ワッチョイ 7fda-ts7H) mailto:sage [2020/05/03(日) 10:26:05 ID:9LS/Ekj10.net]
ああ、

If a = True Then
a = False
ElseIf a = False Then
a = True
End If

みたいなやつか。
大っ嫌いだけどな。

818 名前:デフォルトの名無しさん (ワッチョイ c7da-ts7H) mailto:sage [2020/05/03(日) 13:07:08 ID:T/wh1/tE0.net]
a = Not(a)
でいいんじゃね

819 名前:デフォルトの名無しさん (ワッチョイ 67ac-fZS3) mailto:sage [2020/05/03(日) 13:43:00 ID:AWBCl49n0.net]
エスパースレと化してる

820 名前:デフォルトの名無しさん (ワッチョイ bf2f-WRor) mailto:sage [2020/05/03(日) 14:21:40 ID:jHKSsTzt0.net]
>>811
そもそも>>810が何を言いたかったのかわからんが
それaがBooleanじゃないと同じじゃないからな

821 名前:デフォルトの名無しさん (ワッチョイ a778-NLJ6) mailto:sage [2020/05/03(日) 16:23:21 ID:7ZZm2K4r0.net]
たしかにそうだ

822 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 18:57:16.84 ID:hVYH2JxT0.net]
うん、>>810が何を言いたいのか不明瞭だな。
あのIf文も自分は嫌いじゃ無い。
見てすぐ分かるんで。

長くても短くてもすぐ分かれば問題なし。
a=not aでも別に良い。

823 名前:デフォルトの名無しさん (ドコグロ MM9f-4Orb) mailto:sage [2020/05/03(日) 20:02:39 ID:GBCMW2mVM.net]
If a = True Then
の時点で嫌い

824 名前:デフォルトの名無しさん (ワッチョイ a75f-rvxR) mailto:sage [2020/05/03(日) 20:33:25 ID:INbjbW0w0.net]
If a Then は気持ち悪いわ

825 名前:デフォルトの名無しさん (ワッチョイ 7fda-ts7H) mailto:sage [2020/05/03(日) 20:35:39 ID:9LS/Ekj10.net]
>>815
オバハンが独学で書いてる綺麗なコードって、
a=not aを>>810みたいに書いてるやつかなと思って。

826 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 20:41:41.89 ID:jHKSsTzt0.net]
俺はBooleanにたいして= Trueは大概は冗長に感じるけどな
VBAは型がゆるいからなぁ
If a Then は気持ち悪いが、これは変数名が悪い



827 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 22:08:11.47 ID:dDcWYHiB0.net]
>>808
perl で組んだテトリスだったかな。あれ見たときはぶったまげた。

元々ワンライナーをやりやすい言語とは言え、あれはもう
何が何やらわからない世界だった。どんだけ頭いいんだよと。

でも、「こんなの理解できないの?ふ〜ん(にやにや)」みたいな
のは生産性的には駄目だよね。


美しさをトリッキーさに見出すか可読性に見出すかは人それぞれ
だけど、自分よりスキルが下の他人に保守させるとか、未来の自
分が保守しないといけないかもとかなら冗長性持ってるほうがいい
かも。

いちばん大事なのは懇切丁寧なコメントだろうけど。

828 名前:デフォルトの名無しさん (ワッチョイ 878f-ts7H) mailto:sage [2020/05/03(日) 22:21:26 ID:dDcWYHiB0.net]
>>806
> ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
> が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
> 非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
> でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
> 読んで勉強してるの見かけたので、心がけは見習いたいです。

あえて長文引用させてもらったけど、あんた程度の人間がなんで
その55歳の女性を貶めてるの?

829 名前:デフォルトの名無しさん (ワッチョイ 2791-x7Cl) mailto:sage [2020/05/03(日) 22:55:28 ID:hVYH2JxT0.net]
>>818
いや、想像はついてた。
大嫌いというのが分からんかった。

830 名前:デフォルトの名無しさん (JP 0H8f-Ng5p) mailto:sage [2020/05/03(日) 22:57:44 ID:8sSb2t20H.net]
まともなプログラマなら周りのレベルに合わせて読みやすいコードを書けるよ
VBAの仕事なんかやってる時点でその程度のレベルなんだから仕方ない

831 名前:デフォルトの名無しさん (ワッチョイ 2791-x7Cl) mailto:sage [2020/05/03(日) 22:58:39 ID:hVYH2JxT0.net]
>>820
コメントもたくさんあれば良いというもんじゃない。

Dim blFlg AsBoolean 'フラグ

こんなコメントはアホ。
フラグかどうかは名前と型で分かってる。
残すべきはどういうフラグかだ。

832 名前:デフォルトの名無しさん (ワッチョイ 878f-ts7H) mailto:sage [2020/05/03(日) 23:00:42 ID:dDcWYHiB0.net]
>>824
それは確かにコメントっつうより、「ノイズ」だなw

833 名前:デフォルトの名無しさん (ワッチョイ 2791-x7Cl) mailto:sage [2020/05/03(日) 23:03:28 ID:hVYH2JxT0.net]
>>823
まともなプログラマなら周りのレベルにあわせて読みやすいコードをかける。
お前とは違ってなw

834 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 23:06:45.24 ID:oMB0K2Jka.net]
>>824
こんな奴いるのw

835 名前:デフォルトの名無しさん mailto:sage [2020/05/03(日) 23:07:47.50 ID:hVYH2JxT0.net]
>>825
意外に近いのはある。
コメントより元々の変数名を伝わるものにするのが第一義。
それで伝わりにくい時にコメントで補足する。

836 名前:デフォルトの名無しさん (ワッチョイ 878f-ts7H) mailto:sage [2020/05/03(日) 23:13:29 ID:dDcWYHiB0.net]
ただ、伝わりやすい変数名ってのが読む方の英語の素養に
大きく左右されちゃう不幸が。

TOEICで600くらい(英語の得意な高校生あたり)を想定するのが
いいかなあ。



837 名前:デフォルトの名無しさん (ワッチョイ 2791-x7Cl) mailto:sage [2020/05/03(日) 23:19:40 ID:hVYH2JxT0.net]
Cプログラミング診断室の第三章の中盤に出てくるフラグの所に似たようなのが出てくる。
言語は違うが読んどくと良い。

www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.3.7.html

838 名前:デフォルトの名無しさん (ワッチョイ df02-mIzA) mailto:sage [2020/05/04(月) 01:56:50 ID:6MBl5GGH0.net]
ここのスレ見てると、共同で保守してるのに細かい仕様書作ってない感じ
VBA使いって連携取るの苦手だろ

839 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 02:26:38.20 ID:5comiU6qd.net]
自分だけ楽するために片手間に作ったやつがいつのまにか広まって、ドキュメントなんかもちろん作ってなくて、最初に作った人は異動しちゃって、みたいなことVBAではよくある

840 名前:デフォルトの名無しさん (ワッチョイ e794-C/EQ) [2020/05/04(月) 04:29:56 ID:eaaQNpcs0.net]
VBAは事務員のオバさんが作る程度のオモチャ
仕様書とか本気で言ってんの?
キモいわ

841 名前:デフォルトの名無しさん (ワッチョイ bf12-h83k) mailto:sage [2020/05/04(月) 06:18:26 ID:XD3JqXFe0.net]
仕様書を書くような立場で仕事をしたことない人は黙ってな

842 名前:デフォルトの名無しさん (ワッチョイ c7da-ts7H) mailto:sage [2020/05/04(月) 08:36:53 ID:NmZgEDtP0.net]
会社のファイルで仕様書作ってあげてもいいんだけど今の職場では上司が理解できないからあえて作らないでいる

843 名前:デフォルトの名無しさん (ワッチョイ c7da-ts7H) mailto:sage [2020/05/04(月) 08:37:36 ID:NmZgEDtP0.net]
俺は832ではない

844 名前:デフォルトの名無しさん (ドコグロ MM9f-4Orb) mailto:sage [2020/05/04(月) 09:29:50 ID:eyf9VoYQM.net]
全社に配布するようなものは仕様書も作るしテストもやるけど、自分とか課内で使うようなツールだと作りっぱだな
別に他の言語でも変わらんと思うが

845 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 09:55:22.79 ID:oqIKeiQj0.net]
最近よく来る馬鹿どもが仕様書作れると思うのか?

846 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 10:02:07.63 ID:cVQIuVcH0.net]
共同開発やドキュメントが必要になるレベルのプロジェクトには別の言語を使うのが普通
VBAスレで仕様書の話題はスレ違い



847 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 10:28:02.39 ID:ESbXk+mE0.net]
はいつぎの方

848 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 10:39:56.70 ID:EYE1xMNJ0.net]
うちの職場じゃボタン押すことぐらいしか出来ないような連中ばかりだから
仕様書どころかマニュアル作っても1割ぐらいしか理解してもらえないだろうな
目の前で説明しても少し込み入った設定になると覚える気一切ないしな
俺がいなくなったら終わりと思ってる
コメントすら残してない

849 名前:デフォルトの名無しさん (ワッチョイ a7ad-ur4w) [2020/05/04(月) 11:03:15 ID:mKy38ERH0.net]
こんにちは。
このスレを見て勉強しようと思って色々読んでは、たいてい
なんの話をしているのかもわからない、プログラマではない層の者です。
上の方で、
>>810
If a = True Then 
a = False
ElseIf a = False Then
a = True
End If
みたいな書き方っていやだね。
>>811
a = Not(a)  でいいんじゃ?

という会話があったのですが、>>810 って
どんな時に使うのかさっぱり???でした。
どなたか暇つぶしにでもご教示いただけませんでしょうか。

850 名前:デフォルトの名無しさん (ワッチョイ a78e-MvRk) mailto:sage [2020/05/04(月) 11:58:39 ID:oqIKeiQj0.net]
>>842
死ね

851 名前:デフォルトの名無しさん (ワッチョイ 877c-mIzA) mailto:sage [2020/05/04(月) 11:59:42 ID:zFV2kJYS0.net]
ドキュメントが必要かどうかに言語は関係ない
プロジェクトの内容次第

852 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 12:35:48.74 ID:NmZgEDtP0.net]
>>842
例えばテレビのリモコンの電源ボタンとか消音ボタンのような使い方をするイメージ

853 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 12:43:46.28 ID:RsDc9cGOM.net]
>>839
お前の所の普通が世間一般の普通じゃないだけが

854 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 12:48:54.23 ID:cVQIuVcH0.net]
>>842
誰も使わない悪い例を書いただけ

855 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:16:33.95 ID:c8yfA7Q3M.net]
>>846
お前いつも質問スレに無関係な書き込みばっかだな
どうせPC-VANやってた老害だろ

856 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:17:26.32 ID:n6lRLUl70.net]
If a = True Then

誰にでもわかる書き方でとても良いと思う

今VBAを勉強する人は本職プログラマではなく
別に仕事があって、その効率化の為に学んでる人が主でしょう

そしてそれを非プログラマ同士で共有するのなら
どの本にでも書いてある書き方の方が望ましい
匿名の名人様の言葉に右往左往する必要はないよ



857 名前:デフォルトの名無しさん (ワッチョイ df01-4Orb) mailto:sage [2020/05/04(月) 13:43:10 ID:/ITc8kQd0.net]
>>848
自己紹介かよww

858 名前:デフォルトの名無しさん (ワッチョイ 7fda-ts7H) mailto:sage [2020/05/04(月) 14:09:51 ID:9S16/cFq0.net]
Debug.Print xml.getElementsByTagName("タグ名").Item(0).Text

Microsoft XML, v3.0 参照 → OK
Microsoft XML, v6.0 参照 → エラー

何でやねん。

859 名前:デフォルトの名無しさん (ワッチョイ 2791-x7Cl) mailto:sage [2020/05/04(月) 14:14:20 ID:r232eNWS0.net]
>>842
卜グルボタンとかチェックボックスのようなオンオフするようなものを変数で管理しようとした時に、変数がTrueならFalseに設定し、FalseならTrueに設定する処理を書いている。

最初のIf文の方は英文が分かれば簡単に理解出来る。
Notを使う方はTrue/Falseだから変数を変数自身と反対にすることで実現してる。

860 名前:デフォルトの名無しさん (ワッチョイ 7fdd-ts7H) mailto:sage [2020/05/04(月) 14:35:44 ID:m3H0OQVZ0.net]
検索Dialogの検索場所(WithIn)をVBAから切り替えるアイデアをお持ちの方いたら教えていただけないでしょうか。
全シートから検索するのが目的ではなく、ブック全体検索後に何気に範囲指定置換を実施して引き起こされる惨状を回避したく。
(または別視点による工夫でもOKです)
詳しい方、よろしくお願いします。

861 名前:デフォルトの名無しさん (ワッチョイ 67ac-fZS3) mailto:sage [2020/05/04(月) 15:43:06 ID:ESbXk+mE0.net]
>>853
意味不明な点が多すぎる。
>ブック全体検索後に何気に範囲指定置換を実施して
 検索と置換ダイアログでは検索、置換は違うタブだから操作ミスは起きずらいが、
 そこまでしなきゃならないのか

>引き起こされる惨状を回避したく。
 惨状って具体的になにか

そもそも惨状とやらが起きるのは、GUIの話なのかVBAの話なのか

862 名前:デフォルトの名無しさん (スップ Sd7f-C/EQ) [2020/05/04(月) 15:44:13 ID:gO9XNStOd.net]
今からVBAなんて覚える必要は全くない

863 名前:デフォルトの名無しさん (ワッチョイ a7ad-ur4w) [2020/05/04(月) 18:17:24 ID:mKy38ERH0.net]
841です。
丁寧な解説、みなさんありがとうございました。
勉強になりました。

864 名前:デフォルトの名無しさん (ワッチョイ 67f9-qVEi) [2020/05/04(月) 19:20:35 ID:V2+TGFiQ0.net]
>>856
アンカーも書けず全角で数字を書くよな馬鹿は死ね

865 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 19:40:04.11 ID:m3H0OQVZ0.net]
>>854
説明が不足していました。

検索と置換のタブはパラメータ設定の記憶が共通となっております。
ブック全体検索を行った後に範囲を選択して範囲内置換を実施しようとCtrl+Hを押します。
すると前回検索時の "検索場所=ブック"が活きている状態になっております。
気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
コロン ":" でも削除置換しようものなら全ての時刻書式が破壊されます。
お試しください。

これを防ぐには、ブック内検索を実施した際は引き続きシート内検索を実施して設定を戻しておく必要があります。
普段ブック内検索ってあまり使わないのでこんな時に限って忘れてしまいます。
VBAはどうなっているかというと、.Find .Replace共に、WithInパラメータが存在しないため引数指定できず、直前のUI操作依存となるわけです。
自動化された置換処理があったりすると、事故が起こるわけです。

本件、GGってよく捜してみたら同様の悩みに対するQAありました。

 Range("A1").Find("*")

この1行を実施するだけで検索場所をシートに戻せるようです。
逆に検索場所をブックにする方法を探しているところです。

ご存じの方おられましたら教えてください。

866 名前:デフォルトの名無しさん (ワッチョイ 6741-eET6) mailto:sage [2020/05/04(月) 20:21:19 ID:2XIJsT+F0.net]
.OpenTextで開いたテキストファイルを操作したいのですがやり方がわからなくて困っています。
拡張子CSVなら通常のエクセルワークシートと同様に扱えますが、テキストファイルは無理なのでしょうか?
Workbooks.Countは開いたテキストファイルの分増えているようですが…
ご教示お願いいたします。



867 名前:デフォルトの名無しさん (スフッ Sdff-rvxR) mailto:sage [2020/05/04(月) 20:24:42 ID:mUlUr63md.net]
テキストファイルの中身はどのようなフォーマットで、どう操作したいのですか?

868 名前:デフォルトの名無しさん (ワッチョイ 87e6-aR2J) [2020/05/04(月) 20:40:40 ID:c199Arvf0.net]
1セルに1文字づつならExcelチックに楽しめそうだな

知らんけど

869 名前:デフォルトの名無しさん [2020/05/04(月) 20:56:39.11 ID:oqIKeiQj0.net]
次から次へと馬鹿が来る

870 名前:853 (ワッチョイ 67ac-ts7H) mailto:sage [2020/05/04(月) 21:05:25 ID:ESbXk+mE0.net]
>>858
まず、問題としてる事象は提示している方法で解決するんだよね
そのブック開いたときとか操作したときに実行すればいい

>「ブック全体検索を行った後」に「範囲を選択」して「範囲内置換を実施」(ブック全体と指定しているオプションを開いたまま)
 → その悪意に満ちた行為のみを想定するの?
   検索ダイアログのオプション設定は起動中のExcelアプリ(プロセス)に記憶されるから、
   Excelアプリを開いたまま同じPCで同様の操作をしないと再現しないはず

>気づかずに実施すると全シートの指定文字列が置換されてデータが破壊されてしまいます。
 → さっきの操作をすると検索オプションは開いてるはずだけど、
   それでも気付かずファイル保存するっていう悪意ry
   GUI操作->GUI操作で出る問題なら、運用で禁止するか保護するか、影響に基づいて運用システム自体を見直す

>逆に検索場所をブックにする方法を探しているところです。
 → 問題としてる事象の解決は自分で提示しているようだけど、
   逆に引き起こしたいってことは、単にやりたいから?
   VBAで置換するなら別に全シートをReplace擦ればいいだけだし
   GUIでブックにしたいならそう操作すればいいけど、何が必要なの

検索と置換ダイアログの操作はCommandBars.dialogsとかExecuteMsoとかで表示は出来る
ウィンドウ操作にしても他のダイアログ操作と似たようなもんだろう(APIが多分必要)

GUIとVBAをごっちゃに対応するから要らない悩みを抱える
運用やコストを考えない妄想の機能なら、それこそ趣味でアドインでも作ればいい

871 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 21:24:09.39 ID:2XIJsT+F0.net]
説明足らずで申し訳ありません。
カンマ区切りのテキストファイルに対してOpenTextを使います。これでカンマごとにセルに値が分けらたエクセルブックが開きます。
このブックのシートを通常のエクセルシートと同様に、例えばRange("A1").Activateとしたいのですが、ブックをどうやって指定すればいいのでしょうか?

以下の方法を試しましたがうまくいきません。
元々開いているブックが一つのとき、テキストファイルはWorkbooks.CountWorkbook=2として開かれることを確認。このときWorkbooks(2)をVariant型の変数に代入しようとしました。

Set myBook = Workbooks(2)

ウォッチ式でmyBookの値を確認すると
型 Variant/Object
値 <変数なし>
となり値が取得できません。

テキストファイルの拡張子をCSVに変更すると問題なく値が取得できます。

すみませんがよろしくお願いいたします。

872 名前:デフォルトの名無しさん (ワッチョイ 7fdd-ts7H) mailto:sage [2020/05/04(月) 21:39:32 ID:m3H0OQVZ0.net]
>>863
ご回答ありがとうございます。

>オプションを開いたまま
これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
全体検索実施と範囲選択実施は一連の動作じゃないです。
例えば複数のファイルを開いて作業していて、全体検索を実施したファイルは既に1時間前に閉じていたとしても設定は維持されます。
これを悪意と言われましても、、
まあ、この点は前述のコードをシートイベント等に挟むことで防げそうです。
(設置Bookに限られるかな?まあ、良い方法を考えてみます)

>それでも気づかずに
キーボード主体でマウスはほぼ使わない派なので、範囲選択→ダイアログ開く→検索語、置換語入力→Enterの動作は
一連の操作で、ガッ、ガガガッで感じでやっちゃうのでダイアログのパラメータいちいち確認しないんですよね。
ちょっと落ち着けよって話なんでしょうけど。

>問題としている事象の解決は自分で提示しているようだけど、
最初に掲げた命題が "VBAで検索場所(WithIn)を切り替えたい" だったので逆の操作もできれば知りたいという程度です。
破壊リスクは回避できそうですが、例えば範囲が”シート"の状態からVBAで"ブック"に変更して全置換も可能なのかな、という疑問です。
結論としては通常の方法では出来なそうですね。
Worksheets.Select: Cells.Select を実行すれば、シートをForで回さなくても
 Selection.Replace できることもわかりましたのでこれで解決としたいと思います。

>GUIとVBAをごっちゃに対応するから要らない悩みを抱える
GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。

お付き合いいただきありがとうございます。

873 名前:デフォルトの名無しさん (ワッチョイ df02-mIzA) mailto:sage [2020/05/04(月) 21:50:38 ID:6MBl5GGH0.net]
>>864
txtファイル開いた時点で何かしらのファイル名が付いてるでしょ

874 名前:デフォルトの名無しさん (ワッチョイ a764-7mTq) mailto:sage [2020/05/04(月) 22:13:52 ID:HiZbEqQh0.net]
特に目的があるわけではないけど、興味があってVBAを勉強しようと思ってます。
皆さんどんな勉強法しましたか?おすすめの本とか有りましたら知りたいです

875 名前:853 (ワッチョイ 67ac-ts7H) mailto:sage [2020/05/04(月) 22:16:36 ID:ESbXk+mE0.net]
>>865
まあ終わってるからいいけど・・

>>オプションを開いたまま
>これの意味がわからないですが、ダイアログを開いたままという意味なら、閉じても記憶は維持します。
 →これは、「検索と置換」ダイアログの
  「検索場所」ドロップダウンはGUIだと「オプション>>」ボタンで開かれる拡張エリアにのみ表示されて、
  「ブック全体を選択した」=「オプションを展開表示している」から、GUIなら気付かないわけがない。
  ということ。
  ダイアログ内の設定値同様、オプション展開状況もExcelプロセスで共有してるから、
  他のファイルで展開してるなら違うブックでも展開されたままダイアログ表示される。

>GUIの設定がVBA操作にも影響を与えてしまうから制御できないかなと思った次第です。
  VBAもGUIで行った設定の影響を受けないような、Rangeを指定する記述を普通は心掛けるべきだな

876 名前:デフォルトの名無しさん (ワッチョイ e709-ur4w) mailto:sage [2020/05/04(月) 23:21:11 ID:igVQrW+K0.net]
今までそーいうものだと思い込ませて放置していたことなのですが、
引数を使うのにカッコつけなきゃいけないメソッドと、使わなくてもいい
メソッドって、なにが違うんでしょうか?なにか理由があるのでしょうか。

Dim a As Range: Set a = Cells.Find(What:="test")
ThisWorkbook.ActiveSheet.PrintOut copies:=1

それに付け加えて、findした結果をcolllectionに格納する際、
カッコをつけるとdouble型、つけないとrange型となりました。

検索結果を格納するcollection.Add 検索range
検索結果を格納するcollection.Add (検索range)

ご教授何卒宜しくお願いいたします。



877 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 23:58:21.23 ID:m3H0OQVZ0.net]
>>868
オプションが開かれてるという意味でしたか。
なるほどですね。
呼吸レベルでキーコンビネーションで通り過ぎちゃうので、、しっかり見るべきだと。

>VBAもGUIで行った設定の影響を受けないような
ごもっともです。

普段は .Find系は滅多に使わないのですが、あるとき大被害にあって、、、
どちらかというとGUI操作のほうが悩ましかったので、、、

API制御の方法にも辿り着けて、各Controlの制御もわかりました。
一瞬表示されてしまうのが難点ですが。良い情報をいただきました。

ご助言感謝します。

878 名前:デフォルトの名無しさん (ワッチョイ 877c-mIzA) mailto:sage [2020/05/05(火) 01:19:15 ID:nv2gdYIy0.net]
>>869
とりあえず戻り値があるかないかの違いとでも思っとけばよい

879 名前:デフォルトの名無しさん (ワッチョイ e7ad-HyhH) mailto:sage [2020/05/05(火) 03:17:48 ID:SDhPW+o/0.net]
12121212111211121112みたいな数列で、
1212..と続くものにはA、
11121112..と続くものにはBと置き換え、
AABBBのような文字列を作成することはできますか?

880 名前:デフォルトの名無しさん (ワッチョイ 2701-3faj) mailto:sage [2020/05/05(火) 04:45:25 ID:a+XprBAt0.net]
その数列を文字列に直しておく

これをReplace関数で
1212 → AA
A12 → AA
に置換する

同様に 1112 についても行う

881 名前:デフォルトの名無しさん (バットンキン MM4b-+Mqj) mailto:sage [2020/05/05(火) 12:25:05 ID:hJBFA35lM.net]
>>871
868です。ありがとうございました。

882 名前:デフォルトの名無しさん (ワッチョイ e709-ur4w) mailto:sage [2020/05/05(火) 21:19:05 ID:lsW1yIjx0.net]
vbaのエディタの話なのですが、皆様はコードの複数行を選択したいとき
ショートカットかなにか使っているのでしょうか?
たとえば、一部のコードが不要になって削除や切り取りしたいときに、
ちゃんと行頭から行末までしっかり選択しないとtabやスペースが残ってしまい、
その後コードがズレたり色々と不都合が生じています。
現在は、Homeで行頭、Shift+下矢印で選択しています。
マウスで左端をドラッグすれば選択できるのは知っていますが、これの
キーボードショートカットとかないんですかね・・・

883 名前:デフォルトの名無しさん (ワッチョイ bf2f-WRor) mailto:sage [2020/05/05(火) 21:34:38 ID:wmeBDlBR0.net]
行選択は知らんが、行削除ならCTRL-Yでよくね

884 名前:デフォルトの名無しさん mailto:sage [2020/05/05(火) 21:52:41.57 ID:PgjsbAaO0.net]
検索すれば出てくるよな、俺は shift+上/下 をよく使うけど
https://excel-ubara.com/excelvba1/EXCELVBA485.html

885 名前:デフォルトの名無しさん mailto:sage [2020/05/05(火) 22:03:15.71 ID:lsW1yIjx0.net]
>>877
web拝見しましたが、「複数選択→tabで行範囲が作成される」という部分
でしょうか?確かに、削除ならこれでいけそうです。
(コピーや切り取りのときにはtab→shift+tabで元通りにしなきゃならないかもですが)
私はずっとvbaを使わずエクセル本体の操作に慣れていたのですが、よく使っているのが
適当な複数のセル範囲を作成⇒それらをshift+spaceで行範囲化
という動作だったので、ここにいる方たちはvbaではどんな操作を
しているのか気になって質問いたしました。ありがとうございました。

886 名前:デフォルトの名無しさん mailto:sage [2020/05/05(火) 22:06:50.95 ID:PgjsbAaO0.net]
ちがうだろ



887 名前:デフォルトの名無しさん [2020/05/05(火) 22:11:42.93 ID:NpEa/agLM.net]
このハゲー

888 名前:デフォルトの名無しさん (ワッチョイ e709-ur4w) mailto:sage [2020/05/05(火) 22:30:50 ID:lsW1yIjx0.net]
>>879
すみません、何回webを読み返しても分かりません…
自分でショートカットを作れる(ユーザ設定のコマンド)という部分
かなとも思ったのですが…

889 名前:デフォルトの名無しさん (ワッチョイ 738e-jYUs) [2020/05/06(水) 00:51:48 ID:Kd1uYxyM0.net]
>>881
馬鹿は死ね

890 名前:デフォルトの名無しさん (ワッチョイ 7364-JVfZ) mailto:sage [2020/05/06(水) 00:55:04 ID:zRh9yAG10.net]
>>882
酷いこと言うね

891 名前:デフォルトの名無しさん (ワッチョイ 6bac-V20a) mailto:sage [2020/05/06(水) 01:03:21 ID:6rAOvRF50.net]
コメントアウトだけはctrl+/でデフォルトでできるようにアプデして欲しいわ。。
設定もボタンクリックもめんどい

892 名前:デフォルトの名無しさん (ワッチョイ 5b09-jgrQ) mailto:sage [2020/05/06(水) 08:05:52 ID:p05hHIhJ0.net]
うーむ…どういじっても分からない…
Ctrl+Yは現在の行だけしか削除されないし、そもそも選択範囲は
作成されないし…
おっさんになった私の限界ですかね汗

893 名前:デフォルトの名無しさん (ワッチョイ 17da-oySJ) mailto:sage [2020/05/06(水) 09:03:13 ID:1Pr5leMy0.net]
>>885
やろうとしていることに何の意味がある?

894 名前:デフォルトの名無しさん (ワッチョイ 6602-uk0G) mailto:sage [2020/05/06(水) 09:22:21 ID:iCjbaALk0.net]
意味のある事しかしなかったら進化しない

895 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 10:57:23.06 ID:6rAOvRF50.net]
くっそどうでもいいことに時間かけてるな

896 名前:デフォルトの名無しさん (ブーイモ MMd6-sgQa) mailto:sage [2020/05/06(水) 12:16:06 ID:j2svN8neM.net]
クラスに対してモジュールという概念がよくわかりません。Cで言うところ外部ヘッダファイルとソースみたいなものでしょうか。クラスを使ってたら基本的に出番がない?



897 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 12:56:23.88 ID:Z893TlLs0.net]
クラスはOOPに出てくるクラス
newする必要がないならモジュール

898 名前:デフォルトの名無しさん (アウアウウー Sa1f-t13D) mailto:sage [2020/05/06(水) 13:46:31 ID:gPSsYrwFa.net]
馬鹿が進化してどうにかなるのか

899 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 14:02:43.27 ID:OIN1lY2H0.net]
モジュールはVBがオブジェクト指向になるまえからの互換のためだから
クラスを使うなら忘れてもいいよ

広域で静的なクラスだと思えばいい

900 名前:デフォルトの名無しさん (ワッチョイ cb41-KyAn) mailto:sage [2020/05/06(水) 15:26:50 ID:G9W2eJpB0.net]
>>866
そのファイル名を使っても値が変数なしになってしまいます…

901 名前:デフォルトの名無しさん (ワッチョイ 662f-jW3u) mailto:sage [2020/05/06(水) 16:43:25 ID:OIN1lY2H0.net]
>>864
それウォッチがちゃんと出ないだけで、ブックそのものはとれてるだろ
試しにやってみたが、myBookのウォッチで展開すると変数なしだが
myBook.Sheets(1).Range("A1").Activate でちゃんと動作するぞ

902 名前:デフォルトの名無しさん (ワッチョイ 6602-uk0G) mailto:sage [2020/05/06(水) 18:09:01 ID:iCjbaALk0.net]
どうにかなるのかと思考停止するバカが炙り出される

903 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 18:27:07.81 ID:1Pr5leMy0.net]
目的と手段が逆になる人たまにいる

904 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 18:39:41.01 ID:6rAOvRF50.net]
基本的にプログラミングがうまくなる人って、
早い段階で、特定のやり方にこだわらず最終的に要件を満たせればいいってことに気付けるんだよな

905 名前:デフォルトの名無しさん (ワッチョイ 17da-oySJ) mailto:sage [2020/05/06(水) 19:32:27 ID:1Pr5leMy0.net]
本末転倒か、言葉が出てこなかった

906 名前:デフォルトの名無しさん (アウアウウー Sa1f-lvFW) mailto:sage [2020/05/06(水) 19:37:46 ID:aLD+Grz6a.net]
それはプログラミングをするという前提を置いている時点で矛盾している
手段はなんでもいいから目的達成できりゃいい、だと、だいたいのことは出来合いのSaaSを契約して使うのが最良



907 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 20:34:47.68 ID:6rAOvRF50.net]
仕事ならそうだよね
代わりにSaasでってのは範囲が違うので当てはまらないけど

908 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 20:38:43.01 ID:prm5gj7H0.net]
普段の自分のやり方じゃ対応できない場面が出た時は、
変に拘らずに完成優先でやるべきって意味でしょ






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

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

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