1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ] Excelの「VBA」に関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/ ★1 質問をするときはOSとExcelのバージョンを必ず書きましょう ★2 わからなければとりあえず「マクロの記録」をしてみましょう ★3 丸投げのプログラム作成依頼は受け付けていません ★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです Excel総合相談所 82 pc11.2ch.net/test/read.cgi/bsoft/1241825062/
452 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:06:37 ] >>444 レジストリ
453 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:25:43 ] VBAの年月を取得したいのですが 以下のように作成したのですが、 年:XXXX 4桁で取得できました。 月:XX 2桁ができません、1桁になります。 5月なら05として取得したいのですが、修正方法がわかりません A1には、2009/5/1と入力しています。 VBAに詳しい方で簡単に、どうぞお願いします。 Sub sample() Dim myDate As Date myDate = Range("A1").Value Range("B7").Value = Year(myDate) Range("C7").Value = Month(myDate) Range("D7").Value = Day(myDate) End Sub
454 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:51:04 ] >>445 >>452 ウイルスとかじゃなくて、あちこちアップデートが必要ににりそうなファイルを 自動でパッチあてる感じにしたいんだ レジストリはVBEマクロでいじれるもんなの?
455 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:56:16 ] >>453 A1が日付なら Range("B7").Resize(, 3).Value = Split(Format$(Range("A1").Value, "yyyy/mm/dd"), "/") の1行で充分じゃね?
456 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:19 ] >>453 書式設定か、 Range("C7").Value = "0" & Month(myDate)
457 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:00:18 ] >>450 そうなのですが、いろいろ試してもうまくいかなくて… >>451 すみません。どんな動作をしたいか、書いておくべきでした。 なるほど…2次元ですか。 ただ、できれば動的配列にしたいかなぁなんて思ってまして。 2次元だと、Preserveは片方にしか利かないとか。 ありがとうございました。また、自分でも考えてみます。
458 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:03:50 ] >>456 それじゃ10月は010になってまずいんじゃないかなぁ。 右2文字を取り出せばいいけどね。
459 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:25:21 ] >>455 >>456 サンクス 宣言した変数(例、TTTTTTT)に05を文字列として入力したい) A1に2009/5/1と入力して、あるフォルダの2009年05月XXX.xlsというファイルを 読み込むマクロを書いています。 よろしくお願いします。
460 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:29:22 ] >>453 Range("C7").Value = "'" & Format(myDate, "mm") これじゃダメかな?
461 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:35:54 ] >>459 Format$(Range("A1").Value,"yyyy年mm月XXX")の文字列を作ってWorkbokks.Openと組み合わせるだけ。
462 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:25 ] >>460 できました。 サンクス , - ,----、 (U( ) | |∨T∨ (__)_)
463 名前:デフォルトの名無しさん mailto: [2009/06/12(金) 01:08:40 ] 取得した文字列を、すでに宣言した変数名と一致させて 使いたいのですが、できますか? やりたいのは Dim ABCDE As Integer Dim moji As String moji = AB "moji"CDE = 5 みたいな感じです
464 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 03:32:11 ] >>463 変数はただの入れ物だから、無理じゃないかなぁ 何がやりたいか詳しく書いてくれたら、 別の方法になるかもしれないけれど、実現できるコードを考えられるかも
465 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 04:26:27 ] >>464 たぶん>>463 が言いたいのはリフレクションを使って 動的に変数を追加・参照することは出来ないかってことじゃね? そんなことをして、なんになるのか分からないが、そういうことだと思う # javascriptで関数電卓のフレームワーク+プラグイン(関数やらが定義されてたりする)を作ったときに使ったくらいかな? たぶん、VBAのリフレクションは貧弱だから出来なさそうな気がする。 だけど、サンプルを見る限り、連想配列で良いんじゃね?って思うな。 最終的にやりたいことは userStatus("Jonson") = "空腹" userStatus("Harris") = "眠い" userStatus("cherry") = "ピヨピヨ来た" ってことでしょ。 VBAでどうやって連想配列を使うか知らないけど。 # たぶん、つかえないだろうなぁ # 無かったら、自分で作ればいいけど、速度面でどうなんでしょうねぇ。 # 下手なハッシュ関数作るより、 配列二つ並べて、逐一中身を検索した方が早かったりしてw
466 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 05:21:46 ] >>463 okwave.jp/qa2033484.html これみたいなカンジ?
467 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:05:14 ] >>465 なんか、全然わかってなくて書いちゃって恥ずかしいっす。 教えてくれてあんがと。 連想配列の使い方を調べたら、Dictionaryオブジェクトだらしいです。
468 名前:463 mailto: [2009/06/12(金) 07:51:24 ] "moji"CDEってのが変数ABCDEのつもりです たとえば takeda aoyama tanaka sirakawa aoyama koyama みたいな50種類くらいの名前がかぶりつつ列挙されてて、それぞれ何個 でてきたかしりたいのです。 変数 aoyama_name,koyama_name,takeda_name と人数分の変数を宣言しておいて、セルの文字列を順に取得し、 その文字列に対応する変数にカウントしていく方法ができないかと
469 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:13:29 ] 該当したらインクリメントすりゃ良いんでないかい? Instrでもlikeでも正規表現でも、何でも良い様な気がする。
470 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:34:58 ] >468 こういうことでいいのかな。 A列に(1行目から)集計対象があり、B列、C列に集計結果を出力する。 Option Explicit Dim 名前(100) As String, 件数(100) As Integer, i As Integer, i_max As Integer, 縦 As Long, 内容 As String Sub カウント() Call 初期処理 内容 = Cells(縦, 1).Value Do While (内容 <> "") If i_max = 0 Then 名前(0) = 内容: 件数(0) = 1: i_max = 1 Else For i = 0 To i_max If 内容 = 名前(i) Then 件数(i) = 件数(i) + 1 Exit For Else If i = i_max Then 名前(i_max) = 内容: 件数(i_max) = 1: i_max = i_max + 1 Exit For End If End If Next i End If 縦 = 縦 + 1: 内容 = Cells(縦, 1).Value Loop For i = 0 To i_max - 1 '集計結果の出力 Cells(i + 1, 2).Value = 名前(i): Cells(i + 1, 3).Value = 件数(i) Next i End Sub to be continued
471 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:38:23 ] 続きです Private Sub 初期処理() For i = 0 To 100 名前(i) = "": 件数(i) = 0 Next i i_max = 0: 縦 = 1 Exit Sub End Sub 以上 出現順に名前を格納する配列と件数を格納する配列を用意して、セルの内容を読み込む都度 名前配列を順に調べていく、初めてならば添字を+1して名前を格納し、同じ添字の件数配列 に1をセットするというやり方です。もっとスマートな方法があればお知らせください。
472 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:25:10 ] >>468 Excelの本来の機能は表計算ソフトだから、個数を集計する方法はいくつもあるよ。 COUNTIFとかピボットテーブルとか。 VBAだけでやろうとするより、ワークシートにデータを入れちゃって集計の関数を使った方が早い。 VBAだけでやりたいならDictionaryって便利な機能がある。同じ物があったかどうかのチェックが とても簡単。 Sub 集計() Dim name() As String 'テスト用データを用意 name = Split("takeda,aoyama,tanaka,sirakawa,aoyama,koyama", ",") Set dic = CreateObject("Scripting.Dictionary") For Each n In name '配列で集計 If dic.exists(n) Then dic(n) = dic(n) + 1 Else dic.Add n, 1 End If Next For Each d In dic '結果出力 Debug.Print d, dic(d) Next End Sub
473 名前:470 mailto:sage [2009/06/12(金) 13:14:48 ] >472 こういうことができるんですね。 集計対象データが大量の場合は、いったん文字列変数にに","をはさんで連ねていくことになりますね。 Dictionaryの機能は半角英数の大文字・小文字の別とか日本語対応はどうなんでしょう。
474 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:25:58 ] >>473 あくまでもサンプルだから , で区切ったデータを用意したけど、 実際のデータはワークシートやファイルから読み込むのが普通。 キーワードには日本語も使える。英字の大小は区別される。 データを "鈴木,高橋,山田,田中,鈴木,高橋" に変えて試してみ。
475 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:28:42 ] 50件程度なら重複チェックを省略しても、とりたてて問題はない。 For Each n In name '配列で集計 dic(n) = dic(n) + 1 Next たったこれだけで集計できる。 データが増えると遅くなるけど。
476 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:22:18 ] UserFormから数式を入力させて、その数式に該当するセルに処理を行いたいのですが、 ヒントになるサイトか関数などあれば教えてください。よろしくお願いします
477 名前:463 [2009/06/12(金) 16:27:12 ] 実は集計するだけではなく、 高橋 100点 三根 98点 山田 100点 高橋 100点 青山 97点 山田 99点 (50人くらい、データは1000件くらい) で100点の人だけ集計して100点の高橋が何人いて、 100点の山田が何人いるみたいなことをしたかったので、 100点で検索して左のセルをみて、 文字列を取得して、その取得した文字列と 関連するの配列名にカウントしたかった のですが、どうもdictionaryでできそうです。 みなさんありがとうございました。
478 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:27:50 ] 「数式に該当するセル」が意味不明 実例を示せ
479 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:30:15 ] >>477 その程度ならVBAなんぞ使わんでも一発で集計できるがね
480 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:43:26 ] >>478 失礼しました やりたいことは条件付き書式設定のようなことで、 例えば 30 20 50 60 40 80 というセルを選択した後、ユーザーフォームから数式を入力してボタンを押すと 数式に該当するセルに対して、処理を行うということです。 条件付き書式設定を使えというのは無しでお願いします。。。
481 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 17:31:32 ] 列なの行なの? なんなのその数字。
482 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 18:13:09 ] Chr(13)とvbCrlfの使い分けの判断は何?
483 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:49:23 ] vbCrLf = Chr(13) & Chr(10) Chr(13) = vbCr Chr(10) = vbLf
484 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:11:04 ] >>482 改行コードは状況によって変わることがあるから Chr(13)とかChr(10)とかに固定すると具合が悪いこともある
485 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 21:20:26 ] ぜんぜん「数式に該当するセル」の説明になってない…
486 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:26:08 ] 俺がエスパーすると 数式の解に該当する数字の入ったセル
487 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:58:14 ] 数式: >=50 数式に該当するセル: 50 60 80 ってことじゃね
488 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:10:30 ] 俺がエスパーすると、 フォームから「A2=A1+10」と入力する。A1に5が入っていたとしたらA2に15を入れる。 どうだ?
489 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:27:04 ] 463が説明しようとする度にエスパーが大量に必要になりそうな悪寒 何をどうしたいのか細切れに話そうとしてるからますます判らん w
490 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:28:17 ] ____ /_ノ ヽ、_\ o゚((●)) ((●))゚o ,. -- 、 /::::::⌒(__人__)⌒:::::: / __,>─ 、 | |r┬-| / ヽ | | | | { |__ | | | | } \ ,丿 ヽ | | | | / 、 `┬----‐1 } | | | | / `¬| l ノヽ wwwwwwwwwwwwwwwww \ `ー'ォ / 、 !_/l l / } { \ l / ,' \ ´`ヽ.__,ノ / ノ \ ヽ、\ __,ノ /  ̄ ヽ、_ 〉 ,!、__/
491 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:20:49 ] >>480 数式からEvaluateで戻り値を求めて、その戻り値でフィルターにかけりゃいいじゃん。 それともフィルタオプションで検索条件範囲の1行目を空白にして、2行目に=A2=数式と書きだして抽出するとかね。
492 名前:491 mailto:sage [2009/06/13(土) 16:24:49 ] 俺のエスパー度はマグニチュード7くらいの自信があるから上で間違いないな。
493 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 16:52:40 ] 463まとめ >>463 >>468 >>477 >>480
494 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:30:24 ] >>493 仲間はずれがいるぜ。 >>480 は>>476 だな。
495 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 22:23:18 ] / ノノ ノノノ ヾヽ、ヽ / ノj ` ´ i | i { ` , ,-,、´ i | { i )-―-'( i | ヽ i ⌒ } |_,,,. -‐- 、 __)), ,ノ人 、_, ノ''"´ , \ / ` ー--,. '´ . : :`( ゝ、 / : : :: :´: . : :\ , ' ´_ ヽ / r´: : : : : : ,. ' ´ ヽ>'´ ,'ヽ! / γ: : ノ _ ,, 、,, ,,__i 。 ./ ; ,! i ir' " ヽ ,,, ''' ´ `"7 :/ i |、 ° }, ' ` y' / "'''‐‐- ...,,,_| ヽ、ー/ __ _/ / `'''-,,,て ´  ̄ ̄ / ,イ `''-、__/ / ` / ,! _, `''-,,_ ,..、_,,..イ´ i'´ `ゝ''"´ \_ ,,,,,...ゞ、_ |ー-/ ミ〉 !r'´ ヽ ミ/、 /| i i }