17/11/08 11:28:45.81 +KUB1/9hd.net
早速質問
今vbaでマップ使って
とある表の集計を行なっております
一つのkeyに対しアイテムが複数あるので
配列で入れようと思ったのですがうまくいきません
何か良い方法はありませんか?
3:デフォルトの名無しさん
17/11/08 18:45:21.53 oD3+O0e3E.net
Dim dic
Dim a()
redim a(1)
a(0)="test1"
a(1)="test2"
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "key1", "アテネ"
dic.Add "key2", "ベオグラード"
dic.Add "key3", a
msgbox dic("key3")(0)
msgbox dic("key3")(1)
4:デフォルトの名無しさん
17/11/08 19:49:47.05 aX63wCUb0.net
前スレ
Excel VBA 質問スレ Part50
スレリンク(tech板)
5:デフォルトの名無しさん
17/11/08 20:24:39.43 VRSOCYqCd.net
マップをやめて配列「で」入れる
って意味にとってたけど
マップの中に配列「を」入れる
って意味かよ
6:デフォルトの名無しさん
17/11/09 13:04:15.65 W66xKF5F0.net
アイテムが複数あっても同じkey 使えばいいんじゃねと思った
7:デフォルトの名無しさん
17/11/09 14:39:20.19 goVr3jSD0.net
集計をしたいって事じゃない?
8:デフォルトの名無しさん
17/11/09 20:19:01.12 HS5Oh82mM.net
>>6
やってみてから発言することをお勧めする
9:デフォルトの名無しさん
17/11/09 20:29:22.40 7b9amfpv0.net
いい言葉を見つけた
Those who know don't talk. (知ってる人は教えようとしない)
Those who talk don't know. (教えてる人はあまり知らない)
10:デフォルトの名無しさん
17/11/09 21:19:05.18 F89uizh+0.net
立て乙です。
自宅にエクセル環境が無いのでうろ覚えで
細かい間違いはあるかもですが、該当箇所以外はokという前提です
日本という名前のブック
各都道府県名のシート
があるとき
Dim Bn as Workbook
Dim T as Worksheet
Set Bn = Workbooks("日本")
Set T =Worksheets("東京都")
Workbooks("日本").Worksheets("東京都").cells(1,1) = "123"
Bn.T.cells(1,2) = "456"
を実行すると
上段は問題なく実行されて、東京都シートのセルA1に123が入力されますが
下段でエラーがでてしまいます。また
Bn.Worksheets("東京都").cells(1,2) = "456"
T.Worksheets("東京都").cells(1,2) = "456"
のどちらでも動きました
ブックもシートも両方変数で指定するとエラーになってしまうのでしょうか?
ブックもシートもそれなりに切り替えるので、可能であれば別で指定したいのですが……
心当たりがあればご教示いただけると助かります。
11:デフォルトの名無しさん
17/11/09 21:25:44.32 7b9amfpv0.net
>>10
× Bn.T.cells(1,2) = "456"
○ T.cells(1,2) = "456"
オブジェクトの操作は慣れが必要だけど、こういうもんだと思っておくれ
12:デフォルトの名無しさん
17/11/09 22:48:42.62 5mp2zjAU0.net
>>10
Bn.Tだと
workbookオブジェクトにTって言う属性や関数が無いからエラーになるのは当たり前
13:デフォルトの名無しさん
17/11/09 23:25:52.19 r1UnXx8k0.net
>>10
> Set Bn = Workbooks("日本")
> Set T =Worksheets("東京都")
ここは
Set T =Bn.Worksheets("東京都")
って書くべき
14:10
17/11/09 23:38:24.62 F89uizh+0.net
返答ありがとうございます。
やっぱり両方同時に変数指定はできないんですね……
何というか、指定先が変わる度にセットするのは見づらいような感じがしてまして
明日何とか考えてみようと思います。ありがとうございました
15:デフォルトの名無しさん
17/11/09 23:57:00.50 3LOjlHPk0.net
●●●宇宙の外側に何があるのか?●●●
URLリンク(jbbs.livedoor.jp)▲y/3729/1069922074/84-87
この掲示板(万▲有サロン)に優秀な書き▲込みをして、総額148万円の賞金をゲットしよう!(*^^)v
URLリンク(jbbs.livedoor.jp)▲dy/3729/ →リンクが不良なら、検▲索
16:窓に入れる!
17:デフォルトの名無しさん
17/11/10 00:13:48.87 anK9LaNF0.net
>>10
名前(Workbooks)が一致していればいいってものじゃない。
オブジェクト.メンバ という構文なんだよ。メンバとはそのオブジェクトが持っているメソッドとかプロパティとかのこと。
しかし Bn.T と書くと、オブジェクトとオブジェクトを . で繋いだことになり、これは意味不明なものになる。
18:デフォルトの名無しさん
17/11/10 02:06:21.33 HkDX0vBax.net
コレクションかユーザー定義クラス使うかしたらいいと思うが
19:デフォルトの名無しさん
17/11/10 02:16:45.89 HkDX0vBax.net
>>16
質問者はオブジェクト.メンバの構文の意味が分かってなくてオブジェクトブラウザも見たことない人なんだろうな
オブジェクトのメンバ名を指定してメソッド関数やプロパティ関数を呼び出すことで別のオブジェクトインスタンスのコントロールを取得しているんだってことが理解できてないんだろう
20:デフォルトの名無しさん
17/11/10 10:37:51.15 3nhwt3Be0.net
>>10
>T.Worksheets("東京都").cells(1,2) = "456"
これホントに動いたのか?
WorksheetにWorksheetsプロパティとか無かったはずだけど
何がやりたいかよくわからんが
とりあえずブック名とシート名受け取って該当Worksheet返す関数作ればいいんじゃないかと
21:デフォルトの名無しさん
17/11/10 12:27:51.12 VovrPQN6d.net
ワークシートchangeでtargetのA1が代わったらコードが流れるようにしてて、それ以外はexitで抜けてるんだけど、コードがセルに転記してて毎回changeの所に戻ってはexit、戻ってはexitで見辛いのはなんとかなりませんか?
22:デフォルトの名無しさん
17/11/10 13:11:21.32 ooNCyCJx0.net
>>20
マクロの実行中に何度もセルに書き込みが発生する処理が美しくないので設計を見直す。
23:デフォルトの名無しさん
17/11/10 13:45:49.16 Fw2iLfOX0.net
作った人に聞いてみたら?
24:デフォルトの名無しさん
17/11/10 17:25:45.54 6gcbKBqNp.net
EnableEvents=False
でイベント制御したらだめなの?
25:デフォルトの名無しさん
17/11/10 18:26:04.03 DKnywXcl6.net
SolverOk関数のEngineまたはEngineDescの引数の規定値って何でしょうか?
26:デフォルトの名無しさん
17/11/11 03:04:03.09 pW9oGH+o0.net
>>24
俺の使ってるバージョンだとその引数が無いっぽいから分からんけど
オブジェクトブラウザで表示させれば分かるんじゃね
27:デフォルトの名無しさん
17/11/11 08:36:27.60 Smy5DbHD0.net
MP4ファイルのプロパティ値を取得するプログラムでエラーが発生してしまいます
★の箇所で「'NameSpace'メソッドは失敗しました:'IShellDispatch6'オブジェクト」のダイアログが出ます
参照設定Microsoft Shell Controls and automaitonを追加してもだめでした
解決方法がわかれば教えてください
Private Sub CommandButton1_Click()
Dim Shell, Folder
Set Shell = CreateObject("Shell.Application")
Set Folder = Shell.Namespace(range("A1").Value) ←←←★
28:デフォルトの名無しさん
17/11/11 09:03:00.19 Smy5DbHD0.net
>>26
こちらのサンプルでとりあえず動きましたお騒がせしました
Dim FSO As Variant, SHell As Variant, Folder As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SHell = CreateObject("Shell.Application")
Set Folder = SHell.Namespace(FSO.GetFile(Songs(1)).ParentFolder.Path)
Cells(1, 1) = Folder.GetDetailsOf(Folder.Parse
29:Name(Target), 0)
30:デフォルトの名無しさん
17/11/11 12:39:17.23 KQr/r2/c0.net
エクセル2013を使用しています。
今、日付を手入力しているのですが、何かで見たのですが
カレンダーから選択して入力できる機能があるのですがエクセルでもできる方法ないでしょうか?
いろいろさがした所アクセスはできるのですがエクセルは標準でもなく
カレンダーコントールなるものあるみたいですが、アクセスもインストールしていないので
VBAマクロの中にもありません
31:デフォルトの名無しさん
17/11/11 14:37:40.42 iMxfLIL8a.net
>>14
両方同時にではない。
Worksheetを変数に入れたということはブック情報も込みで入ってる。
だから便利なの。
Aブックのαシートを変数に入れてもその変数でBブックのαシートにアクセスできるわけじゃない。
君のBn.T式のやり方だとBブックのαシートにもアクセスできることになる。
それはBn.Worksheets(T)式と変わらない。
一方、もしBブックのαシートにアクセス出来ないのならBn.T式の意味が無い。
T式で良いわけだから。
32:デフォルトの名無しさん
17/11/11 15:59:40.18 D533txsCa.net
>>27
動くのは結構なことだけどFSO無くてもファイル情報取れるよ。
他の部分で便利にFSO使ってるなら良いんだけどその部分だけ見たら無駄だよね。
Dim objShell As Object
Dim objFolder As Object
Dim objFItm As Object
Set objShell=CreateObject("Shell.Application")
Set objFolder=objShell.Namespace("C:¥Users¥Hoge¥Desktop")
Set objFItm=objFolder.ParseName("fuga.txt")
Debug.Print objFolder.GetDetailsOf(objFItm,3)
参照設定とか書いてるけど、それぞれの意味分かってる?
CreateObjectってのは、その場で名前を元にオブジェクトを作成する。
だからコード書いてる間にはどんなメソッドやプロパティがあるか分からないからインテリセンスでの候補が出ることもない。
参照設定は使うオブジェクトを事前に指定することでオブジェクトの型とかメソッド、プロパティにアクセス(インテリセンス等)しやすくするためのもので、CreateObject使ったり、オブジェクトの型をObjectにしてるんだったら意味がない。
CreateObjectで生成出来ないのも有るし参照設定のがある意味上位互換だけど人にコードを提示する場合は参照設定するよう指示も書かなくちゃなんないからCreateObjectでの例が多いんだけどさ。
もちろん、参照設定したら動くようになるなんてことも無い。
Dim objShell As Shell
Dim objFolder As Folder
Dim objFItm As FolderItem
Set objShell=New Shell
Set objFolder=objShell.Namespace("C:¥Users¥Hoge¥Desktop")
Set objFItm=objFolder.ParseName("fuga.txt")
Debug.Print objFolder.GetDetailsOf(objFItm,3)
33:デフォルトの名無しさん
17/11/11 16:02:23.93 vmoy6u3Z0.net
参照設定は極力しないほうが良いよね
参照設定を忘れてドハマリすることがたまによくある
34:デフォルトの名無しさん
17/11/11 16:04:50.69 D533txsCa.net
>>28
エクセルでも出来るんだけど非常に上級者向けなんです。
上級者でも自分で1から組めない人が多いんじゃないかと思う。
上級者って何?、お前の勝手な分類だろって言われればそうなんだけど。
35:デフォルトの名無しさん
17/11/11 17:24:06.37 vmoy6u3Z0.net
>>28
エクセル アドイン カレンダー
で検索すれば色々見つかるよ
使いやすいもの選べばよろし
36:デフォルトの名無しさん
17/11/12 05:18:36.72 Dmy+tyrb0.net
>>28
UserForm使えば簡単に自作できますよ。
年と月用のテキストボックスをつけて、年と月それぞれ増減させるために、スピンドルボタンをつける。
日付表示用のラベルを必要数用意。
年と月のテキストボックスの値に応じて、ラベルの表示を変更。
ラベルのクリックイベントで、年と月のテキストボックスとラベルのテキストを連結して、日付に変換。
ラベルのクリックイベントは、クラスでまとめれば、クリックイベントをたくさん書く必要もありません。
37:デフォルトの名無しさん
17/11/12 06:52:57.92 UfHz6itl0.net
スピンボタンな
38:デフォルトの名無しさん
17/11/12 11:00:33.46 61FaOR6Wd.net
コードっていろんなパターンあってたくさん書いてると思うんだけど、コードの保管ってメモ帳??
39:デフォルトの名無しさん
17/11/12 11:17:54.47 QqFg5+2e0.net
>>36
エクスポートできるよ
gitとかsubversionとか使えばいい
40:デフォルトの名無しさん
17/11/12 11:23:55.96 61FaOR6Wd.net
連投すまんが、セルを方眼紙にして、フォームの中に直線コマンド、円コマンド、角コマンド等CADみたいなそれぞれ押したらそれが、反映されて作画って出来る?
41:デフォルトの名無しさん
17/11/12 11:28:28.89 QqFg5+2e0.net
>>38
できるかできないかで言うと出来る
各図形の位置に当るセルの背景色を変えれば良いだけ
42:デフォルトの名無しさん
17/11/12 12:15:44.63 chRcmei30.net
>>36
ブログ作ってそこによく使うコードを置いてある
いつでもどこでも検索すれば出てくるので非常に便利
43:デフォルトの名無しさん
17/11/12 12:16:32.95 chRcmei30.net
>>38
できるけどかなりめんどくさい
cacooとか既存サービス使った方が良いと思う
44:デフォルトの名無しさん
17/11/12 17:01:38.36 eJwcw8mO0.net
>>34
簡単じゃないだろw
しちめんどくせーよ
45:デフォルトの名無しさん
17/11/12 17:02:12.03 eJwcw8mO0.net
>>36
モジュールをそのまま保存できるだろ
46:デフォルトの名無しさん
17/11/12 18:22:11.84 syzs4wk80.net
>>42
他に手軽な方法がないからUserFormで作れるようにしておくのが一番いいぞ。
47:デフォルトの名無しさん
17/11/12 18:36:30.88 eJwcw8mO0.net
>>44
まあそれしかないのはそうなんだけどさ
48:デフォルトの名無しさん
17/11/12 20:02:01.58 Dmy+tyrb0.net
vbのランタイムをインストールすればDateTimePicker使えるけど、Formでカレンダー自作しておけば簡単に使い回したり配布出来るから一個作っておくといいと思いますよ。
49:デフォルトの名無しさん
17/11/12 22:30:08.29 XHSQB0UC0.net
フォルダ1
┗XXX29年10月.xlsx
XXX29年11月.xlsx
YYY29年10月.xlsx
YYY29年11月.xlsx
フォルダ2
フォルダN
フォルダ1内に今月のファイルがあったらコピーして名前を翌月に変更して保存
これをフォルダNまで同じように処理する方法教えてください
年月の取得はユーザーフォームが理想ですが全く分らんので
マクロ実行用ファイルのA1に年、A2に月入力して取得する感じを考えてます
50:デフォルトの名無しさん
17/11/12 23:03:42.29 eJwcw8mO0.net
>>47
今月のファイルを探したいならDate関数使えば今日の日付が出るからそっからformatなりyearとmonthくみあわせるなりで取得すればいいからわざわざ入力させる必要がないね
フォルダないのファイル名の取得ならググればいくらでも出てくるぞ
俺はfilesystemobjectを使うけど
51:デフォルトの名無しさん
17/11/12 23:12:47.43 UfHz6itl0.net
>>47
まずは最初の部分だけ
今年 = Format(Now, "e")
今月 = Month(Now)
来月 = DateAdd("m", 1, Now)
年 = Format(来月, "e")
月 = Month(来月)
52:デフォルトの名無しさん
17/11/12 23:16:31.66 UfHz6itl0.net
変数に残す必要なかった
今月 = Format(Now, "ee年mm月")
来月 = Format(DateAdd("m", 1, Now), "ee年mm月")
53:デフォルトの名無しさん
17/11/13 00:50:26.46 cup53tTa0.net
どうしてもカレンダー欲しいんだったらSysDateTimePick32使って頑張るだろうな。
面倒くさいけど他のコントロールもMSFormsを使わないウィンドウ作成もやったことある。
きちんとプロパティ作るの面倒くさいから使いたいものしか実装してないけど。
54:デフォルトの名無しさん
17/11/13 00:58:21.51 cup53tTa0.net
>>48
ファイル名取得にfilesystemobjectは激重だった気がする。
Dir関数で頑張る方がよっぽど速い。
これが原因でfilesystemobjectは使わなくなってしまった。
他では速いものもあるのに食わず嫌いになった。
55:デフォルトの名無しさん
17/11/13 01:02:34.35 AtJ4gbq1x.net
>>52
処理対象のファイルのロングパスがDirの引数の字数制限を越えてるときはどうするの?
56:デフォルトの名無しさん
17/11/13 06:21:29.66 gczEvEcT0.net
そもそも劇重なんて思ったことないが...
57:デフォルトの名無しさん
17/11/13 08:01:19.66 4dN82Cnsd.net
なんか別のものと勘違いしてるんじゃないか
58:デフォルトの名無しさん
17/11/13 08:26:57.35 pr331NCP0.net
たかがファイル名を取得するのに処理負荷を感じるほど重くなるとか考えられないな。
読み取り先が等速ドライブに突っ込んだCDだったとか、回線の細いNASだったとかなら分かるけど。
59:デフォルトの名無しさん
17/11/13 09:22:13.43 mbcSFLNRa.net
>>52
クラスにして使いやすくしてるならDir関数でもいいと思うけど生で使う気は更々起きねーなあれは
めんどくさすぎる
早い遅いは環境次第だろう
何をしようとしたか知らんが
60:デフォルトの名無しさん
17/11/13 12:42:29.30 IBZYfbeXM.net
またVBAでクラス語る奴が来ちゃったよ...
61:デフォルトの名無しさん
17/11/13 12:44:49.20 U+ZWq00Pa.net
なんかWindows10でマクロの挙動が安定しなくなったんだけど、そういうのある?
62:デフォルトの名無しさん
17/11/13 13:17:08.13 GJIgK8HXa.net
>>58
語ってるつもりはないし、普通に機能としてあるのに使ってバカにされる筋合いもない
63:デフォルトの名無しさん
17/11/13 13:21:12.07 ck+reS0/0.net
vbaでクラス使うメリットあるの?
一応あるインターフェースは使い物にならないし、継承も使えないし、コンストラクタに引数も設定出来ない。
vbaでクラス使うメリット教えて
64:デフォルトの名無しさん
17/11/13 13:21:56.90 GJIgK8HXa.net
>>61
カプセル化
65:デフォルトの名無しさん
17/11/13 13:43:14.72 4dN82Cnsd.net
>>61
たまにある
単体の処理してる間だけじゃなく、しばらくの間は状態を持っててほしいとき
ごく素朴な使い方しか出来ないし、しようとも思わないけど
66:デフォルトの名無しさん
17/11/13 13:48:11.54 GJIgK8HXa.net
というか、クラスを使うデメリットって逆に何
67:デフォルトの名無しさん
17/11/13 13:52:55.00 HKnEhqdPd.net
そもそもクラスが必要になるほど大規模なコードを書く用途にVBAは向いてない、使うべきじゃない
ちゃんとした開発環境を使え
会社が許可しないなら転職するか我慢するかの二択、あるいは出世して自分で規則を変えろ
仕事の能率がアップして利益が増えるんなら反対する理由はないだろ
68:デフォルトの名無しさん
17/11/13 15:44:46.11 XD2Cv4t70.net
自分の好きなコードが書けないから転職とかww
69:デフォルトの名無しさん
17/11/13 15:54:24.73 IBY/CNJo0.net
不合理なことを押し付けてくる会社なら、転職も選択肢ってことだろ。日本語ダイジョブ?
70:デフォルトの名無しさん
17/11/13 16:07:38.26 pr331NCP0.net
クラスを使うとシンプルに表現出来る場合がある。規模の問題では無い。
普通に使ってるとなかなか活用するイメージが湧かないけど、覚えておくと役に立つよ。
71:デフォルトの名無しさん
17/11/13 17:08:14.63 GJIgK8HXa.net
ここでも前に書いたけど、配列のラッパークラスとか、一度作ると便利よ
コレクションだと微妙に取り回し悪かったりするからね
これ以上はスレチかな
72:デフォルトの名無しさん
17/11/13 17:09:30.17 4dN82Cnsd.net
>>68
そうだよね
ただ、いちいちクラスモジュールを追加しなきゃならないから、使い捨てクラスをほいほい定義しづらい
73:デフォルトの名無しさん
17/11/13 17:20:46.73 78YzXPYPa.net
FileSystemObjectのファイル一覧取得が遅いのなんて結構有名な話だと思うんだが。
ハードディスクにあるファイル名全部取ってくるとかすれば分かる。
昔
74:、どっかに比較してる所が有ったんだが見つからないな。 Win32APIが一番速かったがDirでもそんなに大きな違いは出なかった。 が、FileSystemObjectは糞遅い結果になってた。 そもそも自分で組んだら遅くてネットで調べたらやっぱり遅かったという。
75:デフォルトの名無しさん
17/11/13 17:23:43.47 78YzXPYPa.net
クラスは凄く便利だが、無理に使う必要は無いと思う。
個人的には仕様を考えた段階でクラス使うのがぴったりと感覚で分かる。
そういう時以外は使わない。
76:デフォルトの名無しさん
17/11/13 17:47:02.85 GJIgK8HXa.net
>>71
そうなんか
まあ、今んとこそんな大量のファイルのやり取りしたことないから体感したことなかったわ
まあ、その辺使うにしても生で扱うよりクラスでまとめちゃった方が取り回し良さそうだがね
その辺は好みなんだろうけどね
77:デフォルトの名無しさん
17/11/13 18:55:14.32 IBZYfbeXM.net
>>64
まともな言語ならクラスを使うデメリットはないけどVBAのクラスは制限が多すぎて使う意味がない
78:デフォルトの名無しさん
17/11/13 19:08:08.64 wM5leOdq0.net
>>59
bit数の関係で安定しなくなったことはある
>>61
多分、ない
class使ったほうが見通しがよくなる場合はあるけど、
正直そんなに変わらんというか、めんどくさくなるだけの場合が多い気がする
79:デフォルトの名無しさん
17/11/13 21:27:40.19 qqs7mRHsj
この流れで突然クソみたいな質問するの恐縮なのですが…
共有で使っているExcelのデータの行がランダムに大量に消える現象が起きてます
多分誰かがオートフィルタかけた状態でうっかり削除したんだと思うんですが、
消えた行に全く共通点が無いので「マクロにウイルスが付いたんだ!マクロやめろ!」って因縁付けられています
まずVBAにウイルスを仕込むならともかく、VBAを使用しているせいでウイルスに感染するって無いですよね?
あとこのコードに行を消すような要素があるか見てもらいたいです
オートフィルタをかけるだけの簡単なコードなんで無いと思うんですが周りに誰も聞ける人が居ないので一応…
簡単な指示だけどすごく頻繁に使うので消したくないんです
Sub filter1()
Range("K2").AutoFilter Field:=9, Criteria1:="<>"
Range("L2").AutoFilter Field:=10, Criteria1:=""
Range("O2").AutoFilter Field:=13, Criteria1:="AA"
End Sub
Sub filter2()
Range("K2").AutoFilter Field:=9, Criteria1:="<>"
Range("L2").AutoFilter Field:=10, Criteria1:=""
Range("O2").AutoFilter Field:=13, Criteria1:=""
End Sub
Sub filter3()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub
80:デフォルトの名無しさん
17/11/13 21:36:08.79 S878v5EG0.net
この流れで突然クソみたいな質問するの恐縮なのですが…
共有で使っているExcelのデータの行がランダムに大量に消える現象が起きてます
多分誰かがオートフィルタかけた状態でうっかり削除したんだと思うんですが、
消えた行に全く共通点が無いので「マクロにウイルスが付いたんだ!マクロやめろ!」って因縁付けられています
まずVBAにウイルスを仕込むならともかく、VBAを使用しているせいでウイルスに感染するって無いですよね?
あとこのコードに行を消すような要素があるか見てもらいたいです
オートフィルタをかけるだけの簡単なコードなんで無いと思うんですが周りに誰も聞ける人が居ないので一応…
簡単な指示だけどすごく頻繁に使うので消したくないんです
Sub filter1()
Range("K2").AutoFilter Field:=9, Criteria1:="<>"
Range("L2").AutoFilter Field:=10, Criteria1:=""
Range("O2").AutoFilter Field:=13, Criteria1:="AA"
End Sub
Sub filter2()
Range("K2").AutoFilter Field:=9, Criteria1:="<>"
Range("L2").AutoFilter Field:=10, Criteria1:=""
Range("O2").AutoFilter Field:=13, Criteria1:=""
End Sub
Sub filter3()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub
81:デフォルトの名無しさん
17/11/13 21:42:36.96 zsNLMe3/0.net
シート保護かけてみるとか
82:デフォルトの名無しさん
17/11/13 21:45:59.98 wM5leOdq0.net
>>77
ウィルスに感染していて、セキュリティをsageているためにウィルスが実行されているというパターンなら考えられるが
其れ以前の問題として
・オートフィルタをかける
・全体をコピー
・ペースト(値として貼り付けなど)
で行が減っている可能性のほうが高いと思う
この仕様
、意外と知られていないんじゃないかなぁ
83:デフォルトの名無しさん
17/11/13 22:24:58.44 S878v5EG0.net
>>79
それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか?
別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします…
試しにオートフィルタしながら同じシートに
84:貼り付けようとしたら「コピー領域と貼り付け領域が違うため貼付できません」となりました
85:デフォルトの名無しさん
17/11/13 22:25:14.14 GJIgK8HXa.net
>>77
まあ、自作マクロでウィルスどうこうはあり得ないわ
コード見る限りでも、フィルターかけてるだけで値の操作はしてないしな
まあ、フィルターかけっぱなしにならないようにブッククローズ時にフィルター解除すれば?
86:デフォルトの名無しさん
17/11/13 22:28:52.42 wM5leOdq0.net
>>80
>それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか?
そう
>別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします…
そか
オートフィルタならまずこれかなーと思ったけど、コピーペーストしてないなら違うかな
87:デフォルトの名無しさん
17/11/13 22:30:45.38 GJIgK8HXa.net
フィルターで謎のデータ消失なら質問者の疑念通りフィルターかけたまんま範囲削除じゃねーかな
88:デフォルトの名無しさん
17/11/13 22:32:36.92 wM5leOdq0.net
実際のコード上げたほうがいいかもねぇ
89:デフォルトの名無しさん
17/11/13 22:46:30.32 S878v5EG0.net
ありがとうございます
コードがおかしいわけじゃないなら良かったです
一応ここに貼ったコードはAAの部分に別の単語が入ってるだけで他は全て実際に使っているものと同じです
クローズ時にフィルター解除するようにはしてなかったのでやってみます
90:デフォルトの名無しさん
17/11/14 09:16:46.87 8wZuibTmp.net
インターネットが壊れた!みたいなのはやめてください!
91:デフォルトの名無しさん
17/11/14 09:53:14.55 tqdP1JBma.net
エクセルの特定の行だけ消すウイルスとか笑えるわ
まあ、バグ満載のマクロとかある意味ウイルスだけど
92:デフォルトの名無しさん
17/11/14 11:29:31.52 G7+v7Fl70.net
ウィルスは簡単に作れるだろ。
リテラシー無い奴が増えたからウィルスとは何ぞ?という議論が必要かも知れんが。
ただ、ExcelよりはAccessとかのが簡単だから大丈夫なんか?と思ったことあるけど。
Application.VBE系のコードが動くようになってれば感染させるのは簡単。
通常、Excelではセキュリティ設定で動かないようにはなってる。
Accessには設定が無い。
WordやPowerPointはどうだったかな。
Application.VBE系ってのはコード書いてるエディタを弄るものでVBAでコードを追加出来る。
つまり自分自身のコードをHDD上の不特定なxlsファイル開いて追加すれば自己増殖出来るし、Auto_Open辺りを追加して次回誰かが開いた時に勝手に実行させることも出来る。
ついでにそのxlsファイルをメールに添付して、アドレス帳の適当な所に送ることも出来る。
少し書ける奴なら分かってるだろうからApplication.VBE系は動かない設定になってるだろう。
Application.VBE系は便利でGithubにアップしたり、VBAのバックアックしたり、コード取得してWinmergeに与えて比較したり色々利用してたけどVB.netのCOMアドインに移行中。
93:デフォルトの名無しさん
17/11/14 11:36:59.15 JNyIRsqMM.net
隙あらば自分語り
94:デフォルトの名無しさん
17/11/14 12:24:48.16 vavtQv330.net
長文はスルーで
95:デフォルトの名無しさん
17/11/14 12:38:00.31 Tcgv7xMn0.net
コンピュータウィルスって「操作している人間の意に沿わない動きをするプログラム」だったと思ったんだけど、
いつの間にか定義が変わったのか。
CDトレー開いたりマウスをランダムに動かすジョーク系もウィルスだったはずだから>>77のもウィルスと言っていいと思ったんだが。
96:デフォルトの名無しさん
17/11/14 12:42:08.62 dN7NjwRxp.net
>>91
その定義だと世の中のあらゆるソフトはウイルスになるんじゃね
バグはあるからな
AndroidやiOSもウイルスになる
97:デフォルトの名無しさん
17/11/14 13:07:49.89 5gpUPtII0.net
>>91
その定義だとワームやトロイの木馬とウィルスが区別できないわけだが
いくら今だとより広義に使われるとはいえ
>>いつの間にか定義が変わったのか
はそのままお前に返してやるよ
98:デフォルトの名無しさん
17/11/14 13:09:39.12 Tcgv7xMn0.net
>>92
バグは確か「論理的に正しくない結果を
99:もたらす何か」みたいな定義だったと思う。 マシン内に虫が侵入して電気的にショートするのが語源だしね。 同じ定義で使い続けるとバグとウィルスがあやふやになるというのは時代の流れだなぁ。
100:デフォルトの名無しさん
17/11/14 13:16:31.95 Tcgv7xMn0.net
>>93
ワームもトロイの木馬も、元々はコンピュータウィルスを感染させるテクニックというか、
媒介手順だったはずがいつの間にか独立してウィルスの親戚みたいな扱いになってるよなぁ。
101:デフォルトの名無しさん
17/11/14 14:03:33.75 5gpUPtII0.net
>>95
もともと、「感染」しないものはウィルスじゃない
いつのまにか独立したんじゃなくて、初めからちゃんと別物でちゃんと区別されていたんだが
いつのまにかまとめてウィルスと呼ばれるようになったんだ
今じゃマルウェア全般が広義にウィルスって言われる始末
バグは語源は諸説あるが、作成者の意図にそわない動作
ウィルスは作成者の意図にそった動作するプログラム
いくらなんでもそれを混同しないでくれ
102:デフォルトの名無しさん
17/11/14 17:57:06.04 Tcgv7xMn0.net
>>96
だからトロイの木馬もワームも単体ではウィルスじゃなかったんだよ。
言うなればコンテナみたいなものなんで、トロイの木馬型のパッチプログラムとかも可能だし。
たぶん想像している「定義づけられた時期」が違うせいで食い違ってるだけだな。
103:デフォルトの名無しさん
17/11/14 17:58:22.04 MC75ktwb0.net
もうやめよう
104:デフォルトの名無しさん
17/11/15 10:46:14.78 PQCfnSyv0.net
>>97
???
自己増殖しなきゃウィルスじゃない。
トロイもワームもウィルスじゃねーだろ。
105:デフォルトの名無しさん
17/11/15 12:15:18.42 l7NNgtZ+d.net
プログラミングによる業務自動化絶対阻止マンがいて、ウィルスだろうがワームだろうが
題目はなんでもいいから邪魔しようとしている
という妄想をした...
...疲れているようだ
106:デフォルトの名無しさん
17/11/15 12:24:36.36 CIMTn4iP0.net
vbaが駄目なら関数でやればいいじゃない
107:デフォルトの名無しさん
17/11/15 12:41:18.42 PQCfnSyv0.net
いや、だからApplication.VBE系の実行を拒否する設定にしておけばOK。
普通はそうなってる。
マイクロソフトも散々懲りたということだろう。
Accessはそうなってないから危険だけど、どっちにしろアンチウィルスソフト入れたり、それなりに敏感ならまあ大丈夫だろう。
メールに添付されたファイルを何も考えずに開くようなバカのいる所はそもそもコンピュ-タ使うなって話。
108:デフォルトの名無しさん
17/11/15 15:25:25.16 PmECE2vTd.net
Excel2010からExcel2013にしたら「ライブラリが見つかりません」というが発生しました。
他のPCで作成したExcelファイルを開こうとしたら上記のようなエラーが発生したのです。
Excel2010の時も参照設定は参照不可になっておりましたがExcelに記載されているデータを
参照するだけでVBSは動かさないのでExcel2010ではエラーになりませんでしたが、Excel2013
ではファイルを開いた際に「ライブラリが見つかりません」というエラーになります。
これはExcelに開いた際に参照設定のチェックをしないみたいな設定があるのでしょうか?
109:デフォルトの名無しさん
17/11/15 17:08:22.00 MYmTne2b0.net
>>103
説明がひどいなw
110:デフォルトの名無しさん
17/11/15 20:25:36.13 m2725R1N0.net
vbeのツールのライブラリファイルって実体はなになんですか?参照不可になったりしますが
オブジェクトエクスプローラのライブラリともちがうし
111:デフォルトの名無しさん
17/11/15 21:27:06.93 BuHcCqTIx.net
>>103
VBSとオブジェクトライブラリに何の関係があるんだ?
112:デフォルトの名無しさん
17/11/15 23:13:12.29 gnIues9e0.net
メモリリークはVBAでどう対処すればいい?
巨大なファイルクローズ後にまるまんまリークするのですが
113:デフォルトの名無しさん
17/11/15 23:18:44.71 R7mLmomD0.net
巨大なファイルは
・作らない
・分割する
・変換する
・開かずに読み取る
・csvならテキストとして読み込む
この辺
メモリリークはある意味どうしようもないので前提からどうにかしないと解決しない
114:デフォルトの名無しさん
17/11/15 23:25:33.43 gnIues9e0.net
>>108
ありがとう。思い当たるのもあります。
・開かずに読み取る
これ、できるんですね。調べてみます
115:デフォルトの名無しさん
17/11/16 02:14:21.20 Og9f/0gn0.net
俺なら読み取り専用で一部だけ読んで閉じる
116:デフォルトの名無しさん
17/11/16 12:25:39.51 NqwHUE6Zr.net
>>107
それはメモリリークではないので気にする必要はありません
117:デフォルトの名無しさん
17/11/17 11:56:05.53 8RvIbz6z0.net
巨大なファイルをSSDのHDDに移すと速いんじゃね
118:デフォルトの名無しさん
17/11/17 11:57:22.13 8RvIbz6z0.net
HDDってかいたけどHDDじゃないけどな
119:デフォルトの名無しさん
17/11/17 12:27:16.57 OabwNEEsd.net
SSDのHHDのFFD
120:デフォルトの名無しさん
17/11/17 17:41:51.06 1LBcgp5Vd.net
VBAで原価計算してる人いる?
121:デフォルトの名無しさん
17/11/17 20:16:29.56 Iig4V4n+H.net
Dir関数で末尾$のフォルダを確認するとエラーになる。
(配下のフォルダはエラーにならない)
これ、どんな理由でしょうか?
122:デフォルトの名無しさん
17/11/18 00:56:48.74 lwdaQlHz0.net
>>116
なぜエラーの内容を書かないのか
軽く試した範囲ではエラーにならないな
環境とエラー内容と、実際にエラーになるコード晒せ
123:デフォルトの名無しさん
17/11/18 12:07:28.26 +9+JGsY3H.net
>>117
ですよね。すんません。
'Case NG
?Dir("¥¥Svr¥Share$", vbDirectory)
'Case OK
?Dir("¥¥Svr¥Share$¥Sub", vbDirectory)
アクセス権は親フォルダから継承していますので双方UNCアクセス可能な状態です。Domain Admins権限で実行しています。
GetAttrの戻りは双方 16 です。
共有名に$をつけない場合は発生しないように見受けられます、、、
と、思ったのですが、$の有無ではなくて、共有フォルダ自体を指定すると発生するようです。
エラーは、52: ファイル名または番号が不正です。となります。
ご教示お願いします。
124:デフォルトの名無しさん
17/11/18 12:11:55.49 +9+JGsY3H.net
>>117
環境は、
2008Server
Win7Pro/Excel 2010@vmware 5.4.0
です。
125:デフォルトの名無しさん
17/11/18 13:20:32.42 +9+JGsY3H.net
>>117
末尾を"¥"で終わらせるとエラーにならないことがわかりました。でも戻りが "." になります。わからなくもないですが "Share$" を期待していたので、、
どう解釈すればいいのでしょうか。
(Dir を使う際は末尾 "¥" を励行したほうがいい?)
126:デフォルトの名無しさん
17/11/18 17:21:41.22 lwdaQlHz0.net
UNCパスでそこは共有名であってフォルダ名じゃない気がするが
127:デフォルトの名無しさん
17/11/18 17:56:31.65 HVgorTjE0.net
すいません wordのVBAです。 画像貼りつけて文字列の折り返しを背景にするのに下記では2行目で
描画の対象とならないオブジェクトが選ばれているためにtypeメソッドまたはプロパティは使用できません。
となりますが、どうしたらよいですか?
Selection.InlineShapes.AddPicture FileName:="a.jpg", SaveWithDocument:=True
Selection..ShapeRange.WrapFormat.Type=wdWrapBehind
128:デフォルトの名無しさん
17/11/18 19:38:08.85 +9+JGsY3H.net
>>121
なんかややこしいですね。
共有名に "¥" をつけて初めて共有フォルダのルートフォルダとして認識される、と覚えておくことにします。
129:デフォルトの名無しさん
17/11/18 22:21:46.28 +9+JGsY3H.net
立て続けにすんません。
onAction の引数について、全角英数記号が半角に解釈されて実行されてしまうのは既知の仕様でしょうか?
ひらがなカタカナは被害を受けないようです。
CommandBars.ActiveControl.Caption
CommandBars.ActiveControl.OnAction
あたりで変換前の文字列を救出できるようですが、、根本的対応はないのでしょうか。
上記で躓いてしまい、公式で情報をみつけられなかったもので、、
130:デフォルトの名無しさん
17/11/19 10:05:19.39 M3mw+ZdH0.net
>>122
まずさ、Selection使うの辞めようぜ。
Hoge.Select
Selection.Fuga
という形が有ったらたいてい
Hoge.Fuga
という形にできる。
つまりね、大抵は選ぶ必要がない。
ある程度書ける人は選ぶ処理をいかに無くすかを考える。
そうすればApplication.ScreenUpdating=False使っても
速度が変わらなくなる。
ちらつき防止のために使うのが有用なのは変わらないんだけど。
.Selectを使うのはユーザーに明示的に場所を示す場合と、
本当にどうしようもない場合がごくまれにあるだけだ。
オブジェクトブラウザでShapeRangeとかWrapFormatを
調べてそこに何が(型)期待されてるかを調べる。
後は合わせれば良いだけだ。
131:デフォルトの名無しさん
17/11/19 10:10:14.58 M3mw+ZdH0.net
>>124
"OnAction" "全角"でググると結構出てくるね。
コメント以外で日本語使うこと無いから遭遇する事無かったわ。
132:デフォルトの名無しさん
17/11/19 11:46:20.87 JvH46D6m0.net
>>125
>.Selectを使うのはユーザーに明示的に場所を示す場合と、
「ユーザーが明示的に選択したオブジェクトを処理する場合」も追加願います
133:デフォルトの名無しさん
17/11/19 11:56:21.06 aexN4+ic0.net
追加願いますって何を言ってるんだ???
134:デフォルトの名無しさん
17/11/19 12:23:26.42 JvH46D6m0.net
>>128
>>125が
>.Selectを使うのはユーザーに明示的に場所を示す場合と、
>本当にどうしようもない場合がごくまれにある 「だ け」 だ。
と言ってるから、もう一つのパターンもあるよ、と言ってるわけだが?
135:デフォルトの名無しさん
17/11/19 12:30:59.55 aexN4+ic0.net
select使わない理由は誤作動の原因になるからの方が多いんじゃないか
もちろんパフォーマンスも大きく変わるけど、言うほど変わらない
それよりもコード上、何のブック、シートがactivateになっているかを把握する方が遥かにめんどくさい
136:デフォルトの名無しさん
17/11/19 12:55:38.95 YlgcavI50.net
作ってるものが偏っているからActiveSheetやSelectionを使う機会がないだけで、
もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
137:デフォルトの名無しさん
17/11/19 12:57:36.65 aexN4+ic0.net
確かにコードの最後にcells(1,1).selectはよく書くけど、それ以外のselectは>>125の通り「本当にどうしようもない場合」だけだな
オートシェイプかなんかでsetできなかったような、忘れたけど
138:デフォルトの名無しさん
17/11/19 13:53:20.81 wFQIPa4T0.net
IOと純粋関数部分を分けるようにと、Hな言語から学んだよ。
139:デフォルトの名無しさん
17/11/19 13:59:20.49 ZK6mPT5SM.net
>>131
> もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
まあそれが
> .Selectを使うのはユーザーに明示的に場所を示す場合と、
> 「ユーザーが明示的に選択したオブジェクトを処理する場合」
なわけだが
140:デフォルトの名無しさん
17/11/19 16:16:58.30 M3mw+ZdH0.net
>>130
誤動作とか以前に無駄なことをしたくないという自然な考えがある。
Cells(1,1).Select
Cells(1,2).Select
Cells(1,1).Select
と書かれてたらなんじゃこれと思うだろ。
マクロの記録は操作を自然に記録してしまうけど、
やりたいことはそれじゃない。
それにコードも汚くなって読みたくないものになる。
141:デフォルトの名無しさん
17/11/19 16:18:58.83 8D87jpDPa.net
ユーザーが明示的に選択したものに~
ってのもぶっちゃけ運用の問題の気もするが
マクロ化の範囲にもよるんだけども
可能な限り避けるべきってのは正しいでしょ
142:デフォルトの名無しさん
17/11/19 17:16:48.30 JvH46D6m0.net
>>136
>可能な限り避けるべきってのは正しいでしょ
そうなの?
実際それをやることは少ないけど、別に避けてるわけじゃないな。
「ボタンを押すと、選択しているセルの書式を~する」なんて処理はたまにある。
143:デフォルトの名無しさん
17/11/19 17:30:54.95 SAgRzZs9a.net
ユーザーが明示的に選択したものに処理を与えるってのはアリだとは思う。
でもそれはHoge.Selectでは無くてSelectionを使う場合だよね。
144:デフォルトの名無しさん
17/11/19 17:35:35.45 JvH46D6m0.net
>>138
なるほど
最初のきっかけとなった>>125の1行目が、
>まずさ、Selection使うの辞めようぜ。
だったからずっと Selection のことを語っていた
145:デフォルトの名無しさん
17/11/19 17:48:04.11 lBNHVI9l0.net
>>136
優先順位の問題でしょ
> ユーザーが明示的に選択したものに~
って言う仕様の方が
> 可能な限り避けるべき
より優先されるのは当たり前
146:デフォルトの名無しさん
17/11/19 17:50:02.84 aexN4+ic0.net
>>138
あぁそれはアリ
会社によっては多用するだろう
147:デフォルトの名無しさん
17/11/19 20:49:12.88 eK6D85VJ0.net
wordのマクロ組んでる人おらんのかな?
148:デフォルトの名無しさん
17/11/19 21:18:16.41 aexN4+ic0.net
>>122>>142
そもそもwordを使わない
あととりあえず動くコードを書いてくれ
Selection..ShapeR
ピリオドがニコあって邪魔
で、差し込んだ画像の文字列の折り返しってのが何がしたいのか良く分からん
テキストボックスなら分かるしそれで通るけど
149:デフォルトの名無しさん
17/11/19 21:23:25.50 eK6D85VJ0.net
>>143 画像のレイアウトで背面にしたいんですよ。 なんかしらんけど動いて、なぜか前面で貼りつけられました。
なんかEXCELと勝手が違いますぬ・・・。
150:デフォルトの名無しさん
17/11/19 21:27:01.10 aexN4+ic0.net
>>144
エクセルと勝手が違うんじゃなくて、ただただ猛烈に使いにくいだけ
で、上手く行ったので質問は終了ってこと?
151:デフォルトの名無しさん
17/11/19 21:31:31.01 eK6D85VJ0.net
>>145 とりあえずは。 また多分色々とお伺いすることになると思いますが、
なにとぞよろしくお願いいたします。
152:デフォルトの名無しさん
17/11/19 22:32:44.41 Z3cAV0my0.net
wordはスレ違いだけどな
あんまりvbaと親和性もないし
あくまで文書ツールだからな
153:デフォルトの名無しさん
17/11/19 22:50:31.56 1/mWyqVE0.net
おいおいExcelかてただの文書ツールやぞw
154:デフォルトの名無しさん
17/11/19 22:56:21.06 aexN4+ic0.net
>>148
釣りはほどほどに
155:デフォルトの名無しさん
17/11/19 23:23:51.19 lBNHVI9l0.net
文書ツールとしてExcel使う奴はたくさんいるけど w
156:デフォルトの名無しさん
17/11/20 08:54:30.90 6BLE5ZLY0.net
>>146
まず君が貼り付けたのは何かを考えよう。
マクロ記録が示すコードを見ればInlineShapeだろう。
InlineShapeを調べれば文字列の中の位置を指定した図形ということらしい。
要は10文字目に挿入とかさ。
InlineShapeにはWrapFormatプロパティは無い。
文字列の折り返しを背景にするというのは回り込み等を自動でやるわけでその結果文字が動くだろ。
それじゃ位置を指定したことにならない。
だから出来ない。
それじゃあどうするかというと、InlineShapeをShapeに変換するというのが1つ。
InlineShapeにはConvertToShapeというのがあるから、それをShapeで受けてやればShapeにはWrapFormatプロパティがある。
Dim iShp As InlineShape
Dim Shp As Shape
Set iShp=Document("hoge.doc").Characters(10).InlineShapes.AddPicture("C:¥fuga.jpg")
Set Shp=iShp.ConvertToShape
Shp.WrapText.Type=wdWrapThrough
しかしそもそも最初からInlineShapeじゃなくてShapeを貼り付ければ問題にならない。
Set shp=Documents("hoge.doc").Shapes.AddPicture("C:¥fuga.jpg")
shp.WrapText.Type wdWrapThrough
Shapeは位置を指定出来ないといっても何文字目という意味で指定出来ないだけで、Left、Top、Width、Heightでの位置指定はできる。
今回の問題もSelectionだったな。
何のオブジェクトを触ってるのかはっきりさせずに組んでるからエラーの意味も分からない。
157:デフォルトの名無しさん
17/11/20 12:21:51.39 phW/Gatbr.net
>>150
そらそれが本来の使い方やもの
なに勘違いしてニヤニヤしとんねんお前
気色悪い奴だな
158:デフォルトの名無しさん
17/11/20 13:11:30.03 tncAZsVja.net
>>152
Jカスこんなところでも下らねー釣りしてんじゃねえよ
159:デフォルトの名無しさん
17/11/20 15:08:27.78 6BLE5ZLY0.net
WordVBAで使いにくいのは記録出来ても良さそうなものが記録出来ない所。
ただ、これはこっち�
160:ェ出来ても良さそうと勝手に思ってるだけでMS的にはまずい何かが有るのかもしれない。 それよりも困るのは Debug.Print Typename(hoge) とやってSelectionが帰ってくる所。 型を知りたいのにSelectionは無いだろう。
161:デフォルトの名無しさん
17/11/20 17:44:20.81 PC8rzjhFa.net
>>154
型名調べる関数もうひとつあったよね
あんま使わんから忘れたけど
162:デフォルトの名無しさん
17/11/20 19:16:12.47 3EUEsxu/0.net
>>154
笑ったw
163:デフォルトの名無しさん
17/11/20 19:56:44.52 HiJj2X0L0.net
>>154
? typename(hoge)とやったら
Emptyと出てきたぞ。
あなた↓の頭と同じでカラッポ。
164:デフォルトの名無しさん
17/11/20 21:46:53.19 dynAF7sP0.net
>>151 ありがとうございます。 じつはそれで解決しました。
マクロで記録したらinlineshapeで、なんやねんこれ?と理解していなかったことが原因でした。
165:デフォルトの名無しさん
17/11/20 22:35:57.11 bUEYENj70.net
前スレ943様の下記ファイル、もう一度upしていただく訳にはいきませんでしょうか。
DLしようと思いながら、失念していて、先ほどしようとしたところ消えてしまっていました。
943様、お手数をおかけしますが何卒よろしくお願いいたします。
943デフォルトの名無しさん (ワッチョイ 06e9-FqSh)2017/11/05(日) 15:01:02.75ID:2uRc+T650>>944>>958
>>942
写真は辞めてくれ。見るのめんどくさい
出てきたからあげるわ
大体やりたいことはこれだと思う
・設定シートのB列に表示したいもの。C列は入力する文字を入れる
・入力シートのA1に「う」と入れて決定。リストが現れて「東京」「北海道」が現れるので選択する
もちろん「う」じゃなくても「東」なんかでもいい。場合によってはB列に「渋谷」とかいれてもいいかもしれない
URLリンク(dotup.org)
自分で言うのも何だがこれ超便利。かなりオススメ
166:デフォルトの名無しさん
17/11/20 23:57:02.00 3EUEsxu/0.net
こういう時はせめてエクセルアップロードできるアップローダーぐらい探してくると良いぞ
167:デフォルトの名無しさん
17/11/21 02:44:24.85 eIBN2cFq0.net
>>157
www
hogeをなんだと思ってる?
そりゃそのまま打てばEmptyが帰ってくるだろう。
hogeで察してくれんかね。
カラッポなのは誰の頭だよ。
168:デフォルトの名無しさん
17/11/21 13:03:45.67 OSkNtsZi0.net
途中経過はどうでもいいから結果を教えろ って人間がどんどん増えてんだな 経営者かよ
169:デフォルトの名無しさん
17/11/21 16:28:44.72 7aGtp6cN0.net
結果はいいから途中経過を教えろ、なんて頭おかしいだろ何言ってんだか
170:デフォルトの名無しさん
17/11/21 17:41:32.87 rp//GM45a.net
>>163
普通は結果教えてもらうなら過程も学ぶんだよ
まあ、別に学びの場じゃないけどね
ただ、腐ってもプログラムだからな
結果だけ知ってもその場しのぎ以上にはならんだろ
171:デフォルトの名無しさん
17/11/21 18:15:13.21 22dwRLVAd.net
世の中は論理的にできているのに>>163が論理的でないのはなぜなのか
172:デフォルトの名無しさん
17/11/21 19:38:11.84 49Yzjg710.net
>>165
単に逆裏待遇を理解していないだけかと
173:デフォルトの名無しさん
17/11/21 21:45:55.72 vcSymdG+d.net
vbaを勉強中の者です。
市販で売られている本など調べても載っていないのですが、for文で使われる変数名が「i」ですが、なぜ「i」なのですか?
「i」の意味を教えて頂けませんか?
既出でしたらすみません
174:デフォルトの名無しさん
17/11/21 21:52:07.73 x41b941k0.net
>>167
iterationのiって事でいいじゃん
175:デフォルトの名無しさん
17/11/21 21:58:13.94 49Yzjg710.net
>>167
>168の通りだけど、もう完全に形骸化している
「i」でもいいし「ページ番号」など日本語表記でもいい
ちなみに俺は「k」から「m」「l」「n」と続ける
単に見間違いにくいように
176:デフォルトの名無しさん
17/11/21 22:07:12.83 L3nv/JJz0.net
今グーグル先生に聞いたらFORTRANからの名残だってでてきた
177:デフォルトの名無しさん
17/11/21 22:14:29.41 wrH3tJZg0.net
>>170
昔読んだVBだかVBAだかの書籍にはトピックとして掲載してた書籍もあったような記憶が
178:デフォルトの名無しさん
17/11/21 22:17:05.57 vcSymdG+d.net
>>168-170
ありがとうございます!
ホント助かりました!
引っ掛かり進まなかったので、これで進みます。
納得できてよかったです
ありがとうございます
179:デフォルトの名無しさん
17/11/21 22:17:55.51 vcSymdG+d.net
>>171さんもレスありがとう!
180:デフォルトの名無しさん
17/11/21 22:18:54.65 2WJixd7Q0.net
integerのiだと思ってたわ
181:デフォルトの名無しさん
17/11/21 22:47:14.99 FV1Lkm8B0.net
>>167
数学でijkは行列などの添え字で使う。
fortranでネストしたループ回すときって、微分方程式を離散化したものを解いたりするパターンが多くて、
二次元や三次元の多次元配列を使ってるだろうから、自然とijkになる。
で、数学のiはintegerからきてる、といったぐあいでは?
182:デフォルトの名無しさん
17/11/21 23:38:11.98 vcSymdG+d.net
>>174、174
数学からなんですか?!
プログラムと数学は違うものと思っていました。ありがとう
183:デフォルトの名無しさん
17/11/22 06:03:08.32 nhDpu2iz0.net
今から60年前にアメリカのIBM社で開発されたFORTRAN(フォートラン)というコンピューター言語があって
そこで変数名の頭文字がI以降なら整数型と定義されたのが始まり
ループカウンターは整数だからFOR文でもIを使ったという歴史がある
一方で昔のBASIC言語ではすべての変数が実数型というのが基本仕様だったので、Iを使う意味はあまりなかったけど、
FORTRANに憧れた世代が書き方を真似してそのまま定着した
という年寄りの昔話
184:デフォルトの名無しさん
17/11/22 14:34:48.52 NEZKz7+Jn
質問です。
マクロ有効ブックがデスクトップにある時はマクロが動くのに
ブックが他のフォルダにあると、マクロが動きません。
原因が判る方いらっしゃいますでしょうか?
因みにコードは以下の通りです。シートコピーの所で躓きます。
Sub フォーム()
'フォームベースを日数分コピー
Dim fd As Date, ed As Date '月初月末
Dim x As Integer, i As Integer '日数とシート枚数
Dim ans '入力欄に入力された値
ans = Application.InputBox("YYYY/MM形式で入力")
fd = DateValue(ans & "/1") '年/月/1 日となる
ed = DateSerial(Year(fd), Month(fd) + 1, 0)
x = Day(ed) '月の日数
For i = 1 To (x - 1) '日数分のシートを生成
Sheets(1).Copy After:=Sheets(Sheets.Count)
Next i '繰り返し
Sheets(1).Range("F1").Value = DateSerial(Year(fd), Month(fd), 1)
End Sub
185:デフォルトの名無しさん
17/11/22 18:32:45.15 mA48vywq0.net
>>176
数学、論理学とは非常に近しいと思う。
関数型プログラミングてスタイルもあるし、
数学の証明をある程度自動化する言語もある。CoqとかAgdaとか。
VBAにもそろそろ高階関数が欲しいですね、MSさん期待してます。
186:デフォルトの名無しさん
17/11/22 18:50:12.14 k1sKIAfY0.net
愛があるからかと思った
187:デフォルトの名無しさん
17/11/22 18:53:30.30 /wgdkUUe0.net
ループカウンタにi、j、kを使うようになったのはC言語の影響が一番大きい。
188:デフォルトの名無しさん
17/11/22 20:12:17.87 Ce6/du3cM.net
どこまで使う?
自分はnまで。
ループ変数以外で1文字の変数は使わない。
189:デフォルトの名無しさん
17/11/22 20:20:06.35 t2AK8w6Da.net
出来ればkまでにしたいね。
実際は思うようにいかなくて俺もnぐらいまで使ったことある。
でも1文字辞めることもある。
190:デフォルトの名無しさん
17/11/22 20:57:00.17 fITl6ULj0.net
>>182
あんまり1文字変数は使わない
処理行数や処理列数などを使ってるわ
年取ると覚えるのが大変なんだよ
191:答えはI~N
17/11/22 21:18:19.80 W0SJQGiTM.net
>>177
> そこで変数名の頭文字がI以降なら整数型と定義されたのが始まり
嘘書くなよ...
X, Y, Z が整数型とかあり得んわ
192:デフォルトの名無しさん
17/11/22 21:46:50.38 T8s4U7Y50.net
最近デザパタに凝っててイテレーターパターンやってるけどなかなかいいよ
まあいかに多重ループしないかは大事だわ
193:デフォルトの名無しさん
17/11/22 21:49:25.89 HR2X/8WF0.net
イテレータと多重ループ回避って関係あったっけ?
194:デフォルトの名無しさん
17/11/22 21:55:38.62 T8s4U7Y50.net
>>187
いやまあ、見た目上ループ変数は減るからw
よってるからよくわからんなってるわ
すまん
195:デフォルトの名無しさん
17/11/22 22:48:54.39 HR2X/8WF0.net
VBAでイテレータパターンて難しそうだ
ループをなくす、って方向の方が良さそうです。
196:デフォルトの名無しさん
17/11/22 22:51:49.31 HR2X/8WF0.net
方向の方w
197:デフォルトの名無しさん
17/11/22 23:20:15.38 pTVfJfW70.net
Excel2010です。
文字列を引数に文字列を返すユーザ定義関数を作りました。
アドインにしてチーム内に配布しようと思ってます。
試しに新規ブックで使ってみたところ、開くたびに変更していないのに保存確認メッセージが出るようになってしまいました。
関数の中の処理を全て消しても保存確認メッセージがでます。
文字列を返すだけの関数なので、保存確認メッセージを出ないようにしたいのですが、どうすればよいでしょうか。
198:デフォルトの名無しさん
17/11/23 00:02:49.97 Kpe6aW6i0.net
>>191
中身を見ないとわからない
Function Foo(bar As Long)
Foo = bar * 2
End Function
と作ってみたけど
>開くたびに変更していないのに保存確認メッセージが出るようになってしまいました。
この減少は起きなかったよ
何か別の所に原因があると思う
199:デフォルトの名無しさん
17/11/23 06:39:11.72 Y2T7cP8D0.net
>>191
それって要するにvlookupの事?
200:デフォルトの名無しさん
17/11/23 13:05:29.27 IQVJTYbd0.net
>>192
簡単に書くとこんな感じの関数です。
Function Kubun(code as string) as string
if (left(code,3) = "123") then Kubun = "A"
end function
if文が大量に続くので共通化してアドインで配布しようと思ってます。
これをKubun.xlbとしてアドインフォルダに保存しました。
新規BookでセルA1に123、セルB1に =Kubun(A1) と入力したところ
セルB1にAと表示され、関数は機能しました。
その後保存した新規Bookを開き何もせず閉じようとすると保存確認メッセージがでます。
201:デフォルトの名無しさん
17/11/23 13:22:13.30 fJlhhdGs0.net
>>194
再計算されてるから
値は変化しないけどセルの内容は更新されていると予想
202:デフォルトの名無しさん
17/11/23 13:42:02.49 UTTVtMan0.net
>>194
アトインって *.xla じゃなかったっけ?
*.xlb だとなんかいいことあるの?
(ツールバー設定とかを記憶するファイルだと思ってた)
203:デフォルトの名無しさん
17/11/23 14:06:43.11 1VQF43Qed.net
>>194
xlbってなんだっけ?
xlamじゃないの?
204:デフォルトの名無しさん
17/11/23 14:07:06.07 1VQF43Qed.net
かぶった
205:デフォルトの名無しさん
17/11/23 14:35:16.43 IQVJTYbd0.net
すいません。拡張子は違ったかもしれません。
206:デフォルトの名無しさん
17/11/23 15:49:16.74 AvEDQSYF0.net
>>194
ネットで検索してみると回答は>>195氏の「再計算」で正解だと思うよ
そのユーザー定義関数の中で使ってる関数の中に再計算が発生する関数が含まれているのでは?
簡単な例でいくと新規ブックのセルA1に=TODAY()と入力し確定、そのブックを保存し閉じる
そのブックを開くとTODAY関数による再計算が発生するため何もせずに閉じようとしても保存確認出る
それと同じことでは
207:デフォルトの名無しさん
17/11/23 17:02:33.93 IQVJTYbd0.net
>>200
192の通り使っているのはif文とLeft関数だけです。
試しに関数の中の処理を全て消してみたのですが、
状況は変わりませんでした。
208:デフォルトの名無しさん
17/11/23 17:02:38.88 mWIv05A8x.net
>>115
要らない
209:デフォルトの名無しさん
17/11/23 17:22:13.82 k3nQdCAx0.net
>>201
おそらく
A1が変わってないときに、=Kubun(A1) という式が必ず同じ値を返すという「保証」ができないので
B1セルが変更されている可能性を排除できない
ということで変更されている(可能性がある)と判断されてる
ユーザ定義関数は中身チェックしないで非決定的だって判断だな
シート開くときに再計算するかどうかのオプション設定なかったっけ?最悪手動かな
210:デフォルトの名無しさん
17/11/23 17:30:51.41 JDomtUrWp.net
>>201
その関数にDebug.print 文を仕込んでおいて
呼ばれたかどうかを確認してみたら?
211:デフォルトの名無しさん
17/11/23 19:42:47.05 IQVJTYbd0.net
>>203
保存確認メッセージを防ぐ方法はないですかね?
>>204
関数は呼ばれていますが、それだと何か方法ありますか?
212:デフォルトの名無しさん
17/11/23 20:00:32.08 fJlhhdGs0.net
>>205
関数が呼ばれると言うことは変更されると言うことだから
保存確認ダイアログが出るのが普通
savedプロパティを変更する方法とか
calculationプロパティをマニュアルにする方法とか
方法はあるかもしれないけど
他の問題が起きるようになるかもしれない
213:デフォルトの名無しさん
17/11/23 23:21:24.29 SB9DcOfL0.net
Application.DisplayAlerts = False
のこと?
214:デフォルトの名無しさん
17/11/24 11:41:27.83 h1FhSyIp0.net
質問です。Excel 2016で、Autofilerされたシートの内容を参照するために
(wsはワークシートオブジェクトです)
Debug.Print ws.AutoFilterMode →この結果は True
Debug.Print ws.AutoFilter.FilterMode →この結果も True
Dim rgFilter As Range
Set rgFilter = ws.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
For Each e In rgFilter
Debug.Print e
Next e
こんな感じで参照しようとしてるんですが、
参照してるシートでフィルターが掛かっていても、いなくても
同じように全件(25行なら25行)がイミディエイトに表示されます。
絞り込まれた結果のみを表示するためにはどうしたら良いのでしょうか?
215:デフォルトの名無しさん
17/11/24 11:52:22.18 BOT2k7iW0.net
>>208
Set rgFilter = ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
216:デフォルトの名無しさん
17/11/24 12:05:42.58 h1FhSyIp0.net
>>209
素早いご回答ありがとうございます。
修正してみましたが、今度は絞込みあり/なし何れも1行だけになりました
何だか難しい操作ですねえ…
217:デフォルトの名無しさん
17/11/24 12:12:04.66 h1FhSyIp0.net
Dim MaxRow As Long
MaxRow = ws.Range("A" & Rows.Count).End(xlUp).row
これを追加して、
Set rgFilter = ws.Range("A1:A" & MaxRow).CurrentRegion.SpecialCells(xlCellTypeVisible)
にしてみても、結果は>>208と同じになりました。
んー謎です
218:デフォルトの名無しさん
17/11/24 13:34:47.29 bxAooAvMa.net
>>205
あるにはあるけどクソめんどくさいぞ
すべてのセルの初期値保持しといて、閉じるときに確認して値に変更なければsavedをtrueにしてから閉じる、とかね
219:デフォルトの名無しさん
17/11/24 16:52:13.42 x6NJ51zce.net
Sheets("Sheet1").Columns(2).Insert Shift:=xlToLeft
Sheets("Sheet1").Columns(2).Insert Shift:=xlToRight
この二行の動作の差が分からないので
違いを教えてください
220:デフォルトの名無しさん
17/11/24 17:34:32.78 HKDmIDHRH.net
>>213
現在のcolumns(2)の中身が左にずれるか、そのままか、かな?
当てずっぽうだけど。
221:デフォルトの名無しさん
17/11/24 19:18:42.44 V+PY16OM0.net
>>206
>>212
アドインをあきらめます。
ありがとうございました。
222:デフォルトの名無しさん
17/11/25 12:49:09.41 roqaXNhOa.net
エクセルVBAですがあるシートで入力し別のシートに転記するというコードを記入しているのですが
For文でやろうとするとうまくいきません。元々のシートの行が11行目から始まり転記先のシートが2行目から始まるのでネストを使って以下のようにコードを組んでみたのですが2行目の入力データが転記先のデータに2行追加されてしまいました。
1行目と2行目はそれぞれ別のデータが記述されておりそのまま転記できるようなコードにしたいです。
もしかしたら、そもそもforだとだめなのかもしれません。ちなみに入力するデータが11行目から始まり終わりは20行目で終わります。
がとりあえず繰り返し構文でできればかまいません。下記のコードをどう変えればいいか教えてください。
Sub 登録()
Set syougai = Sheets("障害記録") 'シート名にて指定しているので変更しない事
Set itigi = Sheets("一時データ") 'シート名にて指定しているので変更しない事
Const hiduke As Long = 19 '日付列の定数
Const gouki As Long = 17 '号機の列の定数
Const era As Long = 18 'エラーコードの列の定数
Const hyou1 As Long = 11 '障害集計表上の定数
Const kisyu As Long = 21
Const syuukei1 As Long = 21
For i = 2 To 3
For j = 11 To 12
itigi.Cells(i, 1).Value = syougai.Cells(j, hiduke).Value '日付
itigi.Cells(i, 2).Value = syougai.Cells(j, gouki).Value '号機
itigi.Cells(i, 3).Value = syougai.Cells(j, kisyu).Value '機種
itigi.Cells(i, 4).Value = syougai.Cells(j, era).Value 'エラーコード
itigi.Cells(i, 5).Value = syougai.Cells(j, syuukei1).Value '集計データ
i = i + 1
j = j + 1
Next j
Next i
End Sub
223:デフォルトの名無しさん
17/11/25 13:36:20.17 fp6T8Ewd0.net
〉〉214
ネストの使い方間違ってると思うのですがどう直せばいいのかわかりません。
224:デフォルトの名無しさん
17/11/25 13:39:02.15 Sg1k8TV00.net
>>216
itigi じゃなくて itiji にしろ
シート名「にて」はやめてシート名「で」にしろ
i = i + 1 と j = j + 1 は不要なので消せ
225:デフォルトの名無しさん
17/11/25 13:55:20.06 QhU2UVSF0.net
>>216
単純にシートで開始行がずれているだけなら
For i = 2 to 3
itigi.Cells(i, 1).Value = syougai.Cells(i +9, hiduke).Value
以下略
Next
でいいんじゃないでしょうか
ループはネストすると
内側のループだけ全部回して外に抜ける、を外のループの回数
だから、ネストでは意図した動作にならないでしょう
>>218も言っているけど、Nextで変数に勝手に+1されるから足さなくていい
226:デフォルトの名無しさん
17/11/25 14:08:02.51 fp6T8Ewd0.net
ありがとうございました。
できました。
227:デフォルトの名無しさん
17/11/25 15:25:06.65 P/RTUJJid.net
てか hiduke なんて変数名使うくらいなら「日付」のほうが10倍まし
228:デフォルトの名無しさん
17/11/25 17:03:29.39 dlgn0p0Vx.net
そもそもVBAでやることなのかな
転記先の一時データのシートのセルに障害記録シートのセルを参照する式を書くだけで良くない?
229:デフォルトの名無しさん
17/11/25 17:17:31.37 4suMRhlB0.net
変数名ぐらい自由にしてやれw
230:デフォルトの名無しさん
17/11/25 17:23:34.66 Yv0FOuti0.net
>>216
値を取得しながら転記しようとするから混乱する
コレクションなり配列なりに一回格納してから転記するようにすればネスト要らん
231:デフォルトの名無しさん
17/11/25 17:30:52.78 Yv0FOuti0.net
>>223
変数名は大事でしょ
こいつの変数の付け方は最悪に近いわ
代入の式見なかったらなんのことだかわからねー
232:デフォルトの名無しさん
17/11/25 17:32:47.09 +Jz8ZPqE0.net
本人できたって言ってるのにグダグダ言う奴ウザイわ
233:デフォルトの名無しさん
17/11/25 17:35:56.02 ISZ6M3sb0.net
hidukeと日付のどちらか選べと言われたら、hidikeを選ぶ。
234:デフォルトの名無しさん
17/11/25 17:37:28.74 S5e4mFeJd.net
仕事内容を記録するエクセルを作成したく、
シート名は各個人名でフォームを開くボタン設置。
登録用に必要項目をフォームで作り、転記するサンプルマクロを書いたんですが、今後必要項目が増えたり、減ったりしたときに人数分フォームを弄ったりマクロ書き換えるのは面倒ななんですけど、一個をものを共有し使用するにはどうしたらいいですか?
各個人のエクセルを開き、作ったボタンで共通のエクセルを開きフォームを開いて転記させるとか?
共通のエクセルを読み取り専用で開き書き込む時に自分のエクセルを開いて転記させるとか?
なんかうまいやり方ないですか?
235:デフォルトの名無しさん
17/11/25 17:42:32.82 Sg1k8TV00.net
>>227
何が言いたいんだW
236:デフォルトの名無しさん
17/11/25 17:52:49.62 M1jU9gED0.net
>>228
シート毎つまり人毎にボタンを作るなら
そのボタンをクリックした時にその人独自の値をグローバル変数とかに代入して
フォームは共通のものを呼び出す
フォームに入力されたものを書き込む時は
さっきのグローバル変数を見て
書き込み先のシートとかを特定する
237:デフォルトの名無しさん
17/11/25 17:53:40.22 M1jU9gED0.net
>>230
同時に複数の人がそのエクセルファイルを使わない事が前提だけど
238:デフォルトの名無しさん
17/11/25 18:31:33.42 S5e4mFeJd.net
>>231
同時に開くことがあるんですよ。
239:デフォルトの名無しさん
17/11/25 18:33:58.83 MqKvnHus0.net
>>228
一つのエクセルファイルを複数人で同時に使うのはいろいろ大変だと思う。
共有共通にせず個人毎に違うファイルを使ってもらって、
仕事内容記録フォルダに入ってるファイル全てをまとめて集計するマクロを作った方がよさそ。
240:デフォルトの名無しさん
17/11/25 18:34:51.02 Sg1k8TV00.net
>>232
データはなんでもいいからDBに書き込んでエクセルはインプット画面として割り切りなさい
マジで
241:デフォルトの名無しさん
17/11/25 18:38:42.16 Yv0FOuti0.net
エクセルの共有はマジで地雷
運用を見直した方がいい
242:デフォルトの名無しさん
17/11/25 19:34:05.10 PrfYax++p.net
>>232
入力するのが一人で他の人が見るだけなら問題ない
複数人が同時に書き込むならエクセルじゃなくて
ウェブアプリとかにした方が良いと思う
243:デフォルトの名無しさん
17/11/25 19:37:11.17 T5+qbkCf0.net
mdbを複数ユーザーで同時に掴めるなら、SQLでデータを投げれば動作するんじゃないの。
入力フォーム作りがクソ面倒くさいからエクセルでやるのは愚策中の愚策なのは確かだけど。
244:デフォルトの名無しさん
17/11/25 19:44:15.61 4suMRhlB0.net
>>225
健康のためなら死ねるタイプ?w
ごめんけど理解不能
245:デフォルトの名無しさん
17/11/25 19:46:52.39 4suMRhlB0.net
どうしてもエクセルだけでやりたいなら、フォームとデータでファイル別けるべきだね
246:デフォルトの名無しさん
17/11/25 20:15:23.25 Yv0FOuti0.net
>>238
いや、常識だろ
自分でメンテするにしたって嫌だわ
247:デフォルトの名無しさん
17/11/25 20:24:47.32 fZkth5mu0.net
フォームボタンをクリックした時に
グローバル変数とかに時刻なり、その人のIDなりを記録して
編集中である事が分かるようにしておく
書き込んだら�
248:Nリアする 他の人がフォームボタンをクリックしたら 編集中かどうかチェックして 編集中なら後で再実行するようにダイアログを出す
249:デフォルトの名無しさん
17/11/25 20:38:06.48 4suMRhlB0.net
>>240
お前の常識とか知らんし興味もない。
他人の変数名にケチ付けるのは常識じゃなくてエゴだろ
250:デフォルトの名無しさん
17/11/25 20:40:07.39 99QBz+fh0.net
React では、データアクセス(CRUD)部分は、
Flux の、Store という部分で、 UI とは完全に分離させている
nmp の、immutable パッケージで、データを変更不能にしたり
251:デフォルトの名無しさん
17/11/25 20:41:41.46 4suMRhlB0.net
日本語でおk
252:デフォルトの名無しさん
17/11/25 21:19:48.45 d0mIe/tRa.net
変数名は結構考えるけどな。
普段なら辞書サイトでその意味の英単語から付けることが多い。
API使えば変数名の重要性が分かる。
253:デフォルトの名無しさん
17/11/25 21:53:57.63 Sg1k8TV00.net
>>245
それは変数名と言うより引数名でしょ?
それだったら確かに大事
254:デフォルトの名無しさん
17/11/25 22:00:33.02 T5+qbkCf0.net
個人的に引数含む変数名に半角英字は避けるように徹底してる。
予約語と被らなくなるし徹底すれば読みやすいしね。
一般的に、名前に半角英数使うのはコンパイラが2バイト文字対応していない事が理由なんで、
対応しているコンパイラには積極的に2バイト文字で投げた方がいい。
255:デフォルトの名無しさん
17/11/25 23:35:03.26 Yv0FOuti0.net
>>246
一年前に作ったコードの宣言部分と代入部分見ずになんの値か把握できる自信があるならどうぞ
まだシステムハンガリアンの方がポリシーあるだけマシ
256:デフォルトの名無しさん
17/11/25 23:36:51.22 Yv0FOuti0.net
レスの相手間違えたわ
>>242
に対するレスね
257:デフォルトの名無しさん
17/11/25 23:47:28.66 Sg1k8TV00.net
>>248
俺が>>246で言った意図は、「引数名は大事だがローカル変数名はたいして大事じゃない」という意味だ。
それに反論しているのかな?
258:デフォルトの名無しさん
17/11/26 09:00:43.39 /OBEl30Ad.net
大事じゃない変数なんてないんだよ
みんなそれぞれに役割があって、一生懸命に生きてるんだから
259:デフォルトの名無しさん
17/11/26 09:30:00.33 ci9PkC0t0.net
>>250
それは違うだろ
まあ、使い捨てのテストなんかは適当にやるけど
長い変数名が嫌なのは打つのが面倒だからなんだろうけど、そもそも同じ変数が何度も出てくる時点でリファクタリングの臭いがするわけでな
260:デフォルトの名無しさん
17/11/26 11:10:58.75 A1ZwwN/70.net
>>252
ローカル変数に限っていうなら、上の方がよくて下に行くにしたがって悪くなると思っている
・ローカル変数がない
・tmp とか a とか x とかいう名前で十分わかる
・適切な名前をつけることでよくわかる
・適切な名前がつけられていないことで混乱する
・適切な名前がつけられているにもかかわらず混乱する
そうだよね?
261:デフォルトの名無しさん
17/11/26 11:15:24.53 hep87Sd80.net
>・適切な名前をつけることでよくわかる
>・適切な名前がつけられていないことで混乱する
同じことじゃね?
262:デフォルトの名無しさん
17/11/26 11:16:38.23 KMInKg0R0.net
ソンタクして変数名にvarを採用
263:デフォルトの名無しさん
17/11/26 11:24:16.70 A1ZwwN/70.net
>>254
いや、
やれば改善する可能性があるのにやっていない状態、ということで下位になっている
264:デフォルトの名無しさん
17/11/26 11:44:51.98 DTyNodR2M.net
>>251
底辺のお前も頑張ってるもんな w
265:デフォルトの名無しさん
17/11/26 11:50:05.48 ApNVvKeX0.net
>>253
ローカル変数がないの意味がよくわからん
値渡しの引数はローカル変数なんだけど
それを除外したとしても、変数なしで書ける処理は限られてくるし
266:デフォルトの名無しさん
17/11/26 12:54:24.61 pGcZHtwF0.net
>>258
不要な変数を作るなってことだろ
そのまま代入すりゃいいのに>>224みたいにいったん変数に格納したがる奴は一定数いる
267:デフォルトの名無しさん
17/11/26 12:56:36.30 OTnHPyYR0.net
VBAからどんどん離れて公開オナニーになってきた
268:デフォルトの名無しさん
17/11/26 13:04:15.84 ci9PkC0t0.net
>>253
tmpとか、座標系の短い変数はきちっと関数化して処理の分断ができてるときに限るけどね
大体そんなもんじゃないかな
>>259
配列に格納してから云々はそれぞれの処理を独立させることであとから見通しがよくなるんだよ
たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったときなんかにループしながら直接吐き出してるとネストが深くなって可読性が低くなる
それぞれ独立してれば関数化するのも楽だしな
269:デフォルトの名無しさん
17/11/26 13:33:08.74 pGcZHtwF0.net
>>261
> たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったとき
その時にやればいいだけ
270:デフォルトの名無しさん
17/11/26 14:16:29.61 ci9PkC0t0.net
>>262
一回変数にいれることでそれがなんの値か、というのを明示するって意味もある
意味があるからやってんだよ
271:デフォルトの名無しさん
17/11/26 14:40:03.00 pGcZHtwF0.net
>>263
>>216ならコメントで十分
272:デフォルトの名無しさん
17/11/26 15:20:43.89 A1ZwwN/70.net
>>258
日付が変わっているからIDは違うが、元の俺の発言は>>250の
>「引数名は大事だがローカル変数名はたいして大事じゃない」という意味だ。
なんだよね。
つまり引数は別として狭い意味のローカル変数について語っている。
それと、>変数なしで書ける処理は限られてくるし
については、良い~悪いの序列の話なので、「変数なしで書けるくらいスコープが狭い方が良い」ということさ。
273:デフォルトの名無しさん
17/11/26 16:18:08.52 t/ZpdAAca.net
( ・ω・)∩シツモーン
範囲A1:C10の値をまとめてD1:F10に代入するときにさ
直接=で結ぶと駄目で
一旦変数で
tmp=range(A1:C10).value
range(D1:F10)=tmp
とかいうふうにすればオッケーなのって何でなのん?
274:デフォルトの名無しさん
17/11/26 16:56:09.10 A1ZwwN/70.net
>>266
Range(A1:C10).Value = Range(D1:F10).Value
でいけると思うけど?
275:デフォルトの名無しさん
17/11/26 17:06:14.25 A1ZwwN/70.net
ごめん逆
>>266のやりたいことは
Range(D1:F10).Value = Range(A1:C10).Value
だね
276:デフォルトの名無しさん
17/11/26 17:18:28.93 ApNVvKeX0.net
値のコピーは
Range("D1:F10") = Range("A1:C10").Value
277:デフォルトの名無しさん
17/11/27 09:03:15.77 3l0DMD54a.net
範囲が同じなら
R1.Value=R2.Valueで行けるな、普通に
Set R1=R2はなんか無理
R1=R2でいけない理由はよくわからん
RangeオブジェクトのデフォルトプロパティってValueだよね?
278:デフォルトの名無しさん
17/11/27 12:39:02.79 Hzamsy590.net
>>270
Rangeの既定のプロパティは、ドキュメント上だとItem
実際はちょっとトリックがあって、_Defaultっていう隠しプロパティ
こいつがアドレス指定しない場合はValueを返す
279:デフォルトの名無しさん
17/11/27 22:21:45.18 HF1f2kGW0.net
>>270
Setを使うということはオブジェクトということだぞ。
それはRangeそのものを代入することを意味する。
A1セルにB1セルを代入など出来よう筈が無い。
A1セルのアドレスがB1?
意味不明だろ。
280:デフォルトの名無しさん
17/11/27 22:54:13.44 scsxtpuJM.net
indirectの悪口はそこまでだ
281:デフォルトの名無しさん
17/11/27 23:55:45.37 ++h0dxh80.net
indirectが未だに理解できない
282:デフォルトの名無しさん
17/11/27 23:58:34.84 VuuuCAGm0.net
>>272
rangeオブジェクトの実体はアドレス情報ってことか?
283:デフォルトの名無しさん
17/11/28 02:02:42.04 +NcnLu/Q0.net
>>275
???
それだけじゃねーだろ。
が、それも含むのは当然。
284:デフォルトの名無しさん
17/11/28 07:27:08.64 ZnyBsd4x0.net
indirectとかsumproductとか、便利なんだけどいまいちよく解らんよな。
285:デフォルトの名無しさん
17/11/28 09:30:34.94 PHeqRDr40.net
忘れちまえよindirectの事なんか
286:デフォルトの名無しさん
17/11/28 09:41:03.64 /j8R3q5Od.net
>>272
Set の左辺は変数だから当然と言えば当然
A1セル自体は変数じゃなくてオブジェクトだからな
287:デフォルトの名無しさん
17/11/28 10:01:09.63 mtOclWiza.net
>>276
いやまあ、セル同士を直接セットが無理っぽいのは何となく感覚でわかるんだが、どういう動きでそうなってんのかなーって気になるわけよ
288:デフォルトの名無しさん
17/11/28 12:43:56.96 ZLcA5r8L0.net
Range()みたいなのって返却値がRangeクラスなだけあってRange()自体は関数だから
289:デフォルトの名無しさん
17/11/28 14:06:44.13 WkhkCF1D0.net
Rangeオブジェクト
Rangeプロパティ
Range関数
Rangeでチン
これが区別できれば完璧
290:デフォルトの名無しさん
17/11/28 22:19:20.97 0EijvfTXM.net
ら...らんげ?
(´・ω・`)b
291:デフォルトの名無しさん
17/11/29 19:36:16.84 vIwO7IkJ0.net
>>281
getRangeにしとけよな
紛らわしいわ
292:デフォルトの名無しさん
17/11/30 20:52:21.44 Acf/eaNYa.net
リストを絞り込み別のリストで1行だけを表示できるようにしたらどうしたらいいでしょうか?
わかりやすくいうと、sheet1にA1からZ1000までのリスト置き、それを何らかの方法で絞込
sheet2のEの1にE列の絞り込んだ1行目をEの2にF列の1行目を表示し次へを押すと2行目を表示するようにしたい
オートフィルみたいなことですが表示したいセルが文文章で多くそのセルだけを表示できるようにしたいです。
1行だけならなんとなくわかるのですが次の行にコマンドボタンを押すことで表示する方法はイメージできません。
for文ならiを使えばいいんでしょうけどやりたいことと違う
293:デフォルトの名無しさん
17/11/30 21:50:06.23 ECoRVPVY0.net
>>285
Find関数使って検索してヒットした行数を返すようにして、
受け取った行数を元に情報を取得、次へボタンはFindNextにしておく。
というのが一番簡単かなぁ。本当はExcelじゃなくてAccessで扱う方がやりやすいんだけど。
294:デフォルトの名無しさん
17/12/01 14:32:31.35 4uYh51s/0.net
以下不明点を教えて
1なぜ変数を初期化するのか?
2なぜNextjでjだけループが終わるのか?
3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない
初心者にもわかりやすく答えよ
Sub CorrectCode()
Dim i As Long
Dim j As Long
Dim Hantei As Boolean
'変数の値を初期化する
Hantei = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To Cells(Rows.Count, 3).End(xlUp).Row
If Cells(i, 1) = Cells(j, 3) Then
'変数に"True"を代入する
Hantei = True
Exit For
End If
Next j
If Hantei Then
'変数の値を"False"に戻す
Hantei = False
Else
'セルの背景色を変える(チェックする)
Cells(i, 1).Interior.ColorIndex = 6
End If
Next i
End Sub
295:デフォルトの名無しさん
17/12/01 14:54:37.77 RC6w6Z/F0.net
>>287
Next j の捉え方からすると、そもそも実行の順番が分かっていないようなので基礎からやる事をおすすめする。
296:デフォルトの名無しさん
17/12/01 15:05:39.92 4uYh51s/0.net
俺なりに日本語訳してみた
間違っていたら教えてくれ
VBA初めて3日です
基礎は本読んでるからわかっている
変数宣言
変数に初期値を入れる わかりやすいように
変数iは2から一番下からみて最初に値の入ってセルまでをループする
変数jも同様
もしもA列とC列にループする上で同じのが見つかったら
変数にTUREを入れる
そしてループを抜ける
そんでまたjのループを繰り返す
もしも変数がTUREをもっていたら
FALSEに変える → なぜ?
セルの
297:色を変える そんでiのループを繰り返す
298:デフォルトの名無しさん
17/12/01 15:48:12.50 AGjDU3vg0.net
初期値をfalseにする理由
trueの時は色づけという流れにしたいので、予めfalseにしておく必要がある
boolean型の初期値はtrueなので。
途中でfalseを入れる理由
i=1 のままで j を最終行までループさせてチェック
その次に i=2 にして j を同じく最終行までループさせてチェックするのだが
i=1 でのチェックが終わった結果 true なら i=2 でのチェックに備えて false に初期化する必要がある
これは基本的に最初の初期化と同じ考え方
299:デフォルトの名無しさん
17/12/01 15:49:27.01 Mw452gW7E.net
Hanteiの初期化、j のループの直前に置けばIf文の後の変数初期化がいらなくなる気がする・・・
300:デフォルトの名無しさん
17/12/01 16:20:04.74 4uYh51s/0.net
>>290
なるほどわかりやすい
このプログラムを日本語化して
301:デフォルトの名無しさん
17/12/01 16:42:02.13 xc+Vk5Dr0.net
>>287
最初の変数初期化は全く必要無い。
そもそもこういうBooleanな変数を用意することに疑問。
こういう変数は、どうにもそれが無いとプログラムが組み立てられない時に使うべきで、出来るなら使わない方向で組み立てるべき。
そして、やってる内容を見ればこんなもの使わない方向で組み立てられる。
こういうコードはやりたいことを論理的につめられていない時に安易に書き出してしまった時になりやすい。
はっきり言ってクソコード。
全く参考にならん。
1.最初の初期化はいらん。
宣言後の初期値はFalseだから。
逆に初期値をTrueにする場合は初期化が必要。
途中の初期化については、jに関する1つの処理が終わった時にTrueになってたら次の処理の結果がおかしくなるから必要。
2.Exit Forのことを言ってるなら最も内側のFor Nextから抜けるからとしか言えん。仕様だね。
3.If~Thenは~がTrueかどうかを判定している。
If i=0 Thenはiが0だったらと考えがちだが正しくはi=0の文がTrueかどうかを判定している。
イミディエイトウィンドウに?(10=10)と入力してEnterキーを押すとTrueとなるし?(10=5)と入力してEnterキーを押すとFalseになる。
302:デフォルトの名無しさん
17/12/01 17:52:43.75 P9JEW6xna.net
>>287
同じこといってるかもしれんけどこの場合変数Hanteiが丸々要らない
if文の中にセルの色変更のコードを書けばいい
仮に、この変数がいるとしてもどんな値が入っててもどうせfalseにするんだからif分岐してる意味がわからない
もっと言うとHanteiとかいう変数名がクソ過ぎる
なんの判定かさっぱりわからん
canChangeColorとかnotMatchValueとかしとけば目的が分かりやすいのに
303:デフォルトの名無しさん
17/12/01 19:09:05.50 RC6w6Z/F0.net
A列の各セルの情報と合致するものが、C列に一件も無かった場合、
次に合致するデータが現れるまでA列の背景色を変え続ける
という処理なのでHanteiが要らない様に書き換えるって難しい気がするんだけど。
304:デフォルトの名無しさん
17/12/01 19:13:14.77 P9JEW6xna.net
>>295
ごめん、そこちゃんと読み込めてなかったわ
一致したら変えると勘違いした
なんにしてもフラグの初期化は頭かケツでいいと思うけど
305:デフォルトの名無しさん
17/12/01 19:49:15.65 4uYh51s/0.net
ちなみにこのコードはVBAエキスパート公式のだよ
306:デフォルトの名無しさん
17/12/01 20:08:56.93 4uYh51s/0.net
似たようなソースコードを作ってみました
なぜだかエラーがでます
Sub test()
Dim i As Long
Dim j As Long
Dim U As Long
For i = 1 To Cells(Rows.Count, 1).End(xUp).Row
For j = 1 To Cells(Rows.Count, 3).End(xUp).Row
If Cells(i, 1) = Cells(j, 3) Then
U = 1
End If
Next j
If U = 1 Then
U = 0
Else
Cells(j, 3).ColorIndex = 3
End If
Next i
End Sub
307:デフォルトの名無しさん
17/12/01 22:17:56.90 eRljVU/z0.net
xUp → xlUp
308:デフォルトの名無しさん
17/12/02 00:44:57.80 aL/u+cy30.net
>>295
確かに一致したものが無かったらだからBoolean使う方が自然か。
使わなくても簡単だけど自然なBoolean使うのが正しいわ。
俺も勘違いした。
ちなみに、一致せずに全てチェックしてjのループを終了した場合のjの値を調べればBooleanはいらんし、そもそもFind使ってループ1つにしてもいらん。
この仕様を見た場合、絶対こんなコード書かないけど、俺が書くとした場合の配列にぶちこむ方法はBoolean使うのが自然だな。
ちなみにランダムで10000行にデータ入れた場合、このコードで320秒、Find使う方法で22秒、配列入れる方法で9秒だった。
309:デフォルトの名無しさん
17/12/02 01:37:25.51 jpak6rxd0.net
小学生がなんで3×5が15になるの?って聞いてるのに
俺なら電卓で答えだすぜ!って息巻いてる人のようにみえる
学習の初段階でつまずいてる人への的確な回答ではないわな
310:デフォルトの名無しさん
17/12/02 05:02:50.84 EvURnJTn0.net
なんつうか、これが俺の後輩なら、フローチャート書いてみって言いたくなるな
もうフローチャートなんて10年以上見てないけどな
>1なぜ変数を初期化するのか?
あってもなくてもこのコードなら動くけど
すべての言語が変数を初期化してくれるわけではないので、変数は必ず自分で初期化しろって作法もある
自分で初期化すれば、初期値を間違えて覚えていたりしてもバグになりにくいしな(Booleanの初期値はFalse)
>2なぜNextjでjだけループが終わるのか?
ちょっと質問の真意がわからん
ForとNextは1対1で対応するんで、Next jならjのループ終端だぞ
>3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない
IfとThenの間に書くのは、条件式と呼ばれる式(文じゃないよ)
式の値がTrueかFlaseで条件分岐する
そして変数はそれだけで式として成り立つ。この場合は変数の内容そのものが式の値
If Hantei=True Thenって書いても良いんだけど、(とくにBooleanに対する=Trueは)冗長だと言って嫌う作法もある
VBAはExcelが現役だから、いつまでたっても入門者が一定数いるよなぁ
はっきり言えば、今どきのブログラムの勉強にはVBAは向かないよ
311:デフォルトの名無しさん
17/12/02 08:17:12.76 /lrBlva0M.net
ブック名 C:\book.xlsx
シート名 データ
説明文パート 1~5行目
データパート
..ヘッダ A6~Z6
..データ A7~Z*
..データ件数 不定
プロバイダ Microsoft.ACE.OleDB.12.0
このような設定でヘッダとデータをselect文で全件取得するにはどうすればいいですか?
312:デフォルトの名無しさん
17/12/02 08:26:37.96 aL/u+cy30.net
>>301-302
超初心者の話かよ。
VBAエキスパートの話じゃなかったんか?
あと、If Hantei Thenを分からないって言ってるのは感覚の話で、君の説明じゃ分からないと思うぜ。
Hantei=Trueという式自体に値があって、それが正しい場合にその値は(Hantei=True)=Trueという結果になっているということが感覚的に分からないと理解できんだろ。
初心者はHanteiとTrueが等しかった場合と感覚的に理解してるんだから。
その感覚ではIf Hantei Thenが理解出来ない。
313:デフォルトの名無しさん
17/12/02 08:27:57.05 cPyK88Sm0.net
>>303
SQLで任意のセル範囲を取得する場合はFROM文で取得出来たはず。
SELECT * FROM [ データ$A6:Z1000] みたいな形。
ただその条件だとデータベースに投げる前にエクセル上で整形した方が効率いいと思うけど。
314:デフォルトの名無しさん
17/12/02 08:31:27.69 7+Ics+9V0.net
if hentai = true then 変態は正義
315:デフォルトの名無しさん
17/12/02 09:32:03.18 1C3LInkCp.net
まず>>287のプログラムを動作順に日本語訳してくれよ
316:デフォルトの名無しさん
17/12/02 11:12:44.97 aL/u+cy30.net
>>307
簡単だろ。
A列のそれぞれのセルに対してC列に同じ値が無かったら色を付けてる。
1.A2からA列の最終セルまで1つ1つのセル(以下Aiとする)について以下を繰り返す。
2.C2からC列の最終セルまでにAiと同じ値が有ったときHanteiをTrueに設定。
3.HanteiがFalseの場合(C列にAiと等しい値はなかった場合)はAiに色を付ける。
4.HanteiがTrueの場合はFalseに設定。(どんな場合だろうがFalseに設定したいが、既にFalseなのにFalseに設定する必要は無い。単にFalseに初期化してるだけ。)
5.Aiの次のセルに対して繰り返し処理続行する。
317:デフォルトの名無しさん
17/12/02 11:17:14.58 tnWofmmQ0.net
>>304
「VBAエキスパート」という資格の勉強をしている超初心者の話だろ?
VBA始めて3日と書いてるし
318:デフォルトの名無しさん
17/12/02 11:45:34.19 cPyK88Sm0.net
エキスパート名乗ってる割にはバグくさいコードなんだよな。
If Not Hantei Then Cells(i, 1).Interior.ColorIndex = 6
Hantei = False
っていう書き方がたぶん本来意図した仕様に近いと思うんだけども。
319:デフォルトの名無しさん
17/12/02 11:46:30.49 ab3YxIeg0.net
Hantei が Hentai に見える
320:デフォルトの名無しさん
17/12/02 14:09:12.13 aL/u+cy30.net
>>309
勉強してる奴が質問してるんであって、
このコードはそいつが書いたもんじゃない。
VBAエキスパート公式ってんだから、
資格の参考書かなんかに載ってるんだろ。
>>310
いや、この書き方自体は良くあるよ。
あんたのも間違いじゃない。
321:デフォルトの名無しさん
17/12/02 14:24:58.47 fk+w59AEa.net
○○でもわかる
○○のすべて
○○エキスパート
○○完全ガイド
こういうタイトル付いてるのは初心者向け
322:デフォルトの名無しさん
17/12/02 14:38:18.30 zmHPgLHa0.net
>>312
だから初心者用の本に載ってるコードが分からないと言ってるんだからこその>>301のツッコミなわけだろ?
本に載ってるコードの評価をしてくれという質問ではない
323:デフォルトの名無しさん
17/12/03 08:02:30.09 Q2bt/ZXPa.net
エクセル相談所にあった質問で、とりあえずVBAなしじゃ出来ないって言っといったんだけど、VBAでリストの絞り込みって一度で出来る?
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって事だと思うんですけど。
インターネットの選択方式でそんなの見た事あるけど一から開発するの面倒くさそう。
ユーザーフォームと2次元配列でも使えばできるかな?
ちなみにこの機能の名称あれば教えて欲しいです。
自分も配列すら参考書でかじったくらいでその必要性がわかってない初心者です
324:デフォルトの名無しさん
17/12/03 08:42:40.14 U0ESQ6dD0.net
残念ながらVBAなしで実現可能
325:デフォルトの名無しさん
17/12/03 09:19:50.58 lwbJHU3ya.net
お力添えをお願いします
チェックボックスでチェック入れたら行の高さを0にし、チェック入れなかったら13.5にしたいのですがうまく動作してくれません
Sub チェック8_Click()
Dim A As Boolean
Dim B As Boolean
If A = True Then
A = Rows(43).RowHeight = 13.5
B = Rows(44).RowHeight = 13.5
Else
A = Rows(43).RowHeight = 0
B = Rows(44).RowHeight = 0
End If
End Sub
どこが間違っているのかご教示お願いします。
326:デフォルトの名無しさん
17/12/03 09:52:22.12 ObUuqjZI0.net
>>317
行は適当に変えてくれ
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If
End Sub
327:デフォルトの名無しさん
17/12/03 10:04:41.09 ObUuqjZI0.net
>>317
フォームコントロールならこっちだわ
コントロール名は適当に変えてくれ
Sub チェック2_Click()
If Sheet1.CheckBoxes("チェック 2").Value = 1 Then 'これでダメなら下を試そう
'If "Sheet1".Shapes("チェック 2").ControlFormat.Value = 1 Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If
End Sub
328:デフォルトの名無しさん
17/12/03 10:11:57.07 lwbJHU3ya.net
>>319
ありがとうございます!!!こちらで動作しました!!本当に有難うございます!!!
329:デフォルトの名無しさん
17/12/03 10:42:36.13 HLUSF6su0.net
〉〉314
できるの?
入力規則の絞り込みじゃないよ?
階層化してリストから直接下層に移動(3段階くらい)して選択する方法だよ? <
330:デフォルトの名無しさん
17/12/03 11:18:12.75 U0ESQ6dD0.net
おいおい急に条件増やすなよw
URLリンク(www.tschoolbank.com)
こういうことじゃないのかよ
331:デフォルトの名無しさん
17/12/03 11:24:14.71 pXIsIngK0.net
>>322
これの話だから知らないなら絡んでくるなよ
スレリンク(bsoft板:713番)
332:デフォルトの名無しさん
17/12/03 11:39:56.54 JkBkmVnb0.net
>>314
違う。
そのコード書いた奴に向かって言ってるのと、躓いてる奴にはそのコードはよろしくないと言ってる。
何の例かは分からんが、もっと現実的なコードにすべきなんだぜ。
333:デフォルトの名無しさん
17/12/03 12:12:17.46 HLUSF6su0.net
>>322
しかも、わかりにくいかもしれないけど条件ちゃんと書いてあるんだけどね
入力規則の絞り込み検索じゃない。
階層ごとにクリック選択する事すらめんどくさいと言ってるんだよ。
一度の選択でリストの階層移動ができるかどうかを質問主は相談所で聞いていて
自分はVBAないとだめだよと回答したけどVBAだとどうなんだろうとこっち
で聞きなおしてみたんだけど、
334:デフォルトの名無しさん
17/12/03 12:58:31.51 A600L+iiM.net
>>325
さすがにそれは読み取れん
335:デフォルトの名無しさん
17/12/03 13:12:35.66 bN8T4SKTM.net
>>323
こういう糞レスがつくからスレが過疎るんだぞ
336:デフォルトの名無しさん
17/12/03 13:54:27.80 HLUSF6su0.net
ちゃんと、VBAでリストの絞り込みって一度で出来る? こう書いて
その下に
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって
こう書いてあるんだけど読み取れない?
しかも、前文にエクセル相談所にあった質問こうも書いてあるし。
で、わざわざVBAで聞いてるのにわからないかー