Excel VBA 質問スレ Part26

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2012/11/24(土) 03:34:13.38
>>951
「取る」の意味がわからん
取り除く =RIGHT("03",1)
取り出す =LEFT("03",1)
953デフォルトの名無しさん:2012/11/24(土) 03:38:46.38
cstr(clng("03"))
954デフォルトの名無しさん:2012/11/24(土) 03:48:48.71
>>952 >>953
ありがとうございます。
Format 関数を使ったら出来ました。
955デフォルトの名無しさん:2012/11/24(土) 08:55:39.70
>>938
質問や書き込みをする前にもう一回試したり調べたりしてからのが
人生で恥ずかしい思いをする事が少なくなるぞ
いやまじでまじで焦りは禁物
956デフォルトの名無しさん:2012/11/24(土) 09:04:35.06
>>938
最後の一行いらなくね?


あとExcelのバージョンは?
957デフォルトの名無しさん:2012/11/24(土) 16:11:49.42
Office 田中 のスキルってお前らどう思いますか?

どうも俺らの方が上な気がしてしまうんだが。
958デフォルトの名無しさん:2012/11/24(土) 16:14:37.87
VBAの編集ウィンドウでは、Visual Studio みたに
マウスで選択した行を一度にコメント、コメントアウト
する様なショートカットボタンは無いですか?
959デフォルトの名無しさん:2012/11/24(土) 16:17:23.33
あと、

#region ****

#endregion

みたいなのってVBAじゃ無理?
960デフォルトの名無しさん:2012/11/24(土) 17:20:23.10
>>958
Office XPはあるよ。
それ以外のバージョンは手元にないんで知らん。

1.VBEのツールバーを右クリック。
2.メニューの中から「ユーザー設定」を選択。
3.「ユーザー設定」ウィンドウの「コマンド」タブを選択。
4.「分類(G):」の中から「編集」を選択。
5.「コマンド(D):」の中の「コメントブロック」か「非コメントブロック」をツールバーにドラッグして移動。
961デフォルトの名無しさん:2012/11/24(土) 17:49:40.29
>>957
高いスキルを保有していることと
人に教えることは、何というか別物だと思うんだ
962デフォルトの名無しさん:2012/11/24(土) 17:53:55.73
>>957
少なくともアルファベットを全角で書くやつはPC初心者に多いよね
963デフォルトの名無しさん:2012/11/24(土) 17:58:55.71
>>962
あなたですね。
964デフォルトの名無しさん:2012/11/24(土) 18:28:55.71
>>957
彼の知識は上の中くらいはある
でも頭の回転はさほど良くない

初心者相手に知識や初歩テクを伝授することは出来ても
素晴らしいプログラムを生み出したり
中級以上の者のステップアップになるような
記事や本を書くのは無理

人間、生まれた時からVBAの知識を持ってる奴など居ないから
初めは彼の知識を見て「こいつ、詳しいじゃん」と思うだろうが
頭の回転の良い奴は、理解や知識の蓄積も早いから
すぐに彼の領域を超えてしまい、「こいつより俺の方が上じゃん」となる
965デフォルトの名無しさん:2012/11/24(土) 18:56:06.98
>>960
ありがとうございます。Excel2010でも出来ました。

>>961 >>964
あの人のスキル自体は然程高く無いでしょうけど、
人に分かり易く教えるスキルはかなり上位なんじゃないかと思います。
966802:2012/11/24(土) 19:04:13.33
自分にはVBAはまだ早かったようなのでマクロの記録でやりました。
Excel自体の理解も浅いようなのでもっと勉強したいと思います。
お目汚し済みませんでした。
967デフォルトの名無しさん:2012/11/24(土) 20:19:46.06
こんどはAdvancedFilterで同一行に複数(3つ以上)の項目でフィルターをかけるとき、
フィルターは、「指定の値で始まる」にしたいんです(つまりワイルドカードが最後についたような「てすと*」みたいなもの。)。
これはどうやったらできますか?
CriteriaRangeにはセル範囲を入れないといけないらしいし一行目は項目名だから、ワイルドカードが使えないのです。

(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
968デフォルトの名無しさん:2012/11/24(土) 20:20:58.04
荒らし認定。みんなスルーな。
969967:2012/11/24(土) 20:44:49.83
ありゃ、できたわ。
でもそれは作業用のセルをわざわざつくって、「てすと*」みたいに代入したから。
こうせず、コードだけでCriteriaRangeを実現することはできますか?

(理解できるのは限られた人のみと思いますが)
970デフォルトの名無しさん:2012/11/24(土) 23:24:56.94
自分にはまだ早いと言ってるやつが将来にわたって出来たためしがない
今この機会を逃すのはどうして?
971デフォルトの名無しさん:2012/11/24(土) 23:34:42.41
VBの開発理念は、10分で作れそうかどうか?というものになります。
それ以上はそれなりのしっかりした開発環境で開発しましょう、という事です。
更にそのサブセットでしかないVBAでコレ以上悩むなら、それは無駄だということです。
これ以上無駄に時間を消費する事を止め、解る人に開発を依頼してください。

ご安心下さい、あなたがダメと言う訳ではありません。
あなたは向いてない、というだけの事です。
972デフォルトの名無しさん:2012/11/25(日) 02:38:20.62
それマイクロソフトのおっさんの発言だろ?
実際にはサポート切りたいのに使われすぎて切れないって時点で
そいつの想定外の使われ方されてるのは分かりきってるし
そんな理念はとうに崩れてるよ
実際に仕事でVBで○人月の開発とかザラにあるんだが・・・
973デフォルトの名無しさん:2012/11/25(日) 05:17:05.16
VBならともかく
VBAでそれやるのは
間違ってる気がする
974デフォルトの名無しさん:2012/11/25(日) 08:23:34.21
実はそうでもない
VBAはExcelというプログラム分からない人でも長年使っていたインターフェイスを持っており
そのインターフェイスをそのままに、長年使ってきたシートフォーマットをそのままに
機能追加や自動化が出来るというメリットがある

PC慣れしてる奴は、Excelのシート操作がVBやCなどで作ったフォーム入力になっても何の弊害も感じないし
むしろそっちの方がやりやすく感じるものだが、PCに疎い奴は、ユーザーフォームで入力を簡素化してやっても
「作業が簡素化されている」ということより「以前と操作や入力方法が違う」ということに弊害を感じてしまうものだ

組織の中で働く以上、いまだそういう人の方が多いくらいだと言うことを忘れてしまうと
一部のPCベテランのみには認められるが、大多数のPC初心者にはウザがられる独りよがり野郎になってしまう
975デフォルトの名無しさん:2012/11/25(日) 10:39:12.38
たとえば
activecell.AutoFilterまで入力すると自動入力候補が現れますが
cells(1,1).autofilterを入力してもなにも現れないのは
どうしてですか?
976デフォルトの名無しさん:2012/11/25(日) 10:42:30.84
Cells(1,1)の戻り値がObject型だから。
977デフォルトの名無しさん:2012/11/25(日) 10:48:39.09
このレベルの質問してくる奴にその説明で伝わるかな?
978975:2012/11/25(日) 10:54:39.06
どういうことでしょうか?
979デフォルトの名無しさん:2012/11/25(日) 10:55:18.24
じゃあActivecellの戻り値は何型?
980デフォルトの名無しさん:2012/11/25(日) 11:05:34.62
そういうもの。まあVBAだし。
981デフォルトの名無しさん:2012/11/25(日) 11:45:13.74
>むしろそっちの方がやりやすく感じるものだが、PCに疎い奴は、ユーザーフォームで入力を簡素化してやっても
>「作業が簡素化されている」ということより「以前と操作や入力方法が違う」ということに弊害を感じてしまうものだ

Windows 8 ですね。わかります。
982デフォルトの名無しさん:2012/11/25(日) 12:38:01.11
>>975
Cells(1,1)ってCells.Item(1.1)の省略形なんだよ。厳密にはCells.[_Default](1,1)だが
これらItemプロパティや[_Default]プロパティはRange以外でもいろんなものに使われている
たとえばWorksheets("Sheet1")はWorksheets.Item("Sheet1")の省略形。これも厳密には上と同じ[_Default]だ
だからItemプロパティでは入力候補を出しようがないんだな
Range("A1")やCells.Resize(1,1)などきちんとRange型を返すプロパティなら入力候補が出る
あるいはCells(1,1)をRange型の変数に入れてからピリオド打てば入力候補が出る

コーディングするときは入力候補が出るようなコーディング方法がおおむねセンスの良いコーディング方法だ
たとえばWith Worksheets("Sheet1")としてピリオド打っても入力候補は出ないが、Worksheet型の変数に
Set ws = Worksheets("Sheet1")
With ws
とすればピリオド打った時入力候補が出る
983デフォルトの名無しさん:2012/11/25(日) 12:53:11.69
間違いだらけのドヤ顔解説w
984デフォルトの名無しさん:2012/11/25(日) 12:57:45.83
間違いだそうだから>>983に正しい解説求む
985デフォルトの名無しさん:2012/11/25(日) 13:02:30.13
正しい解説は>>983にお任せしてようするにItemプロパティって実行してみないと型がわからない実行時バインドってことね
986デフォルトの名無しさん:2012/11/25(日) 13:18:24.21
> With Worksheets("Sheet1")
Worksheetsの引数に変数使うならまだしも
リテラル値でベタ書きするなら
With Sheet1
ってすれば良いだけ

シート名(ブックのシートタブに表示される名前)は
VBA使わない人でも変更できるから、この名前を使って
シートを特定する方法は他者が使う場合は特に
バグの原因になることも多い
シートのオブジェクト名(CodeName)は、VBAわかる人以外
まず弄ることは無いからバグを引きおこしにくい
987デフォルトの名無しさん:2012/11/25(日) 13:19:42.26
よく見たらピリオド打った時の話じゃなかったな
>>982は的外れだった
988デフォルトの名無しさん:2012/11/25(日) 13:21:18.02
>>986
オブジェクト名使うのには俺も賛成だ
固有の型を返すからね
989デフォルトの名無しさん:2012/11/25(日) 15:37:14.77
>>986
他のWorkSheetを見てしまう可能性があるからそれはだめだろ
990デフォルトの名無しさん:2012/11/25(日) 17:43:39.44
何勘違いしてるんだ?
991デフォルトの名無しさん:2012/11/25(日) 18:37:11.45
>>986
マクロブックからデータブックを扱うときのデータブックのコードネームの使い方を教えて欲しい
992デフォルトの名無しさん:2012/11/25(日) 18:39:12.85
人に物を聞くときは最後に次の一文をつけることがこのスレの礼儀

(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
993デフォルトの名無しさん:2012/11/25(日) 18:46:45.15
994デフォルトの名無しさん:2012/11/25(日) 18:51:24.94
>>985
バインドってなんですか?
怪我したときに貼るやつ?
995デフォルトの名無しさん:2012/11/25(日) 19:09:32.46
>>994
ツマンネ
996デフォルトの名無しさん:2012/11/25(日) 19:26:36.74
>>990
他のワークブックがアクティブなときにマクロ実行するとそっちのブックのSheet1をwithるだろ
997デフォルトの名無しさん:2012/11/25(日) 19:58:51.92
>>996  意味不明
そっちのブックってコードが書いてあるブックのことか? それなら理解できるが
998デフォルトの名無しさん:2012/11/25(日) 20:10:08.75
ようするにワークブックとワークシートを明示しないとどのブック・シートになるかわからない、ってことじゃないの?
実は俺もよく解ってないんだけど、俺はいつもこうしてる。
Set myBook = Workbooks("hoge")
Set mySheet = myBook.Worksheets("fuga")
With mySheet

End With
999デフォルトの名無しさん:2012/11/25(日) 20:15:05.52
そう
Sheet1等のシートオブジェクトを指定した場合
対象となるワークブックは暗黙的にActiveSheetになる
だからAというブックへマクロを適応しようとしても
他のBというブックがActiveSheetになっていると
Aに対して行いたいことがBに対して行われてしまう
1000デフォルトの名無しさん:2012/11/25(日) 20:20:50.91
次スレ:Excel VBA 質問スレ Part27
http://toro.2ch.net/test/read.cgi/tech/1353842387/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。