09/06/03 23:02:19
>>361ですが、
特にレスがないってのは出来ないって事でしょうか・・・
それともここにはそれだけの知識を有した方がいないんでしょうか
375:デフォルトの名無しさん
09/06/03 23:18:19
もう来んな。臭すぎて気分悪いわ。
やっぱり俺が出て行くわ。
376:デフォルトの名無しさん
09/06/04 00:04:06
> それともここにはそれだけの知識を有した方がいないんでしょうか
そうだよ、だから帰ってね
377:デフォルトの名無しさん
09/06/04 00:19:07
>>341
PowerPointから
CreateObject("Excel.Application")して
GetOpenFileNameするってのもありか
378:デフォルトの名無しさん
09/06/04 02:59:12
>>374
まあファイル総数を調べた後に1つ1つカウントすればいいんじゃね?
簡単だろ?わからないなら1から10までカウントのプログラム書いてみ?セルに表示するやつ
あとはそれをどう表現するかの問題。セルに色塗ったり、色付きラベルの長さを伸ばしたり・・・
コントロールもあったかもしれん
そもそも経過処理表示を本気で実装するのは難しい(無理)
インスコ等でも分かると思うが、人間の感覚と処理経過に乖離が発生する。
379:デフォルトの名無しさん
09/06/04 03:09:35
>>374
「vba ステータスバー」でググった一番上。まさにこれかと・・・
そもそもfor文使ってるのに意味分かってないのがアウツ
380:デフォルトの名無しさん
09/06/04 06:52:18
おまえらほんと優しいな、あからさまに煽ってるやつの相手してあげるなんて
381:デフォルトの名無しさん
09/06/04 07:25:18
で?
382:デフォルトの名無しさん
09/06/04 07:35:17
って
383:デフォルトの名無しさん
09/06/04 07:50:09
/ニYニヽ
/( ゚ )( ゚ )ヽ
/::::⌒`´⌒::::\ 呼んだ?
| ,-)___(-、|
| l |-┬-| l |
\ `ー'´ /
384:デフォルトの名無しさん
09/06/04 09:08:08
XP、Office2003を使用しています
IEのherf="javascript:clickQuickLink('summary');"
これをクリックしてページの推移をしたいのですが
このリンクをマウスでクリックするようにvbaでクリックする方法を教えていただけないでしょうか
よろしくお願いいたします
385:デフォルトの名無しさん
09/06/04 09:40:56
>>384
VBAを使ってのExcelの操作ではなくIE(IEオブジェクト)の操作はスレ違い>>4
386:デフォルトの名無しさん
09/06/04 11:30:08
いちいち言わなくてよろしい
387:デフォルトの名無しさん
09/06/04 15:32:16
言わずとも解ってる人には言わなくても良い
言わないと解らない人には言う必要がある
スレ違いな質問しちゃう人は後者なので言う必要がある
388:デフォルトの名無しさん
09/06/04 15:54:06
ほっとけばよろしい
389:デフォルトの名無しさん
09/06/04 16:00:08
寛容と無秩序を取り違えている人?
390:デフォルトの名無しさん
09/06/04 16:13:58
うざいよ
391:デフォルトの名無しさん
09/06/04 16:17:48
スレ違い認定はもういいよ
392:デフォルトの名無しさん
09/06/04 17:11:47
論では返せず
393:デフォルトの名無しさん
09/06/04 19:14:19
ならツモで
394:デフォルトの名無しさん
09/06/04 20:27:47
>>361です
見付かったファイル状況ならもちろん分かります。
検索しているファイルのカウントを表示させたいんですが、
どこでどのオブジョクトを見ればよいのかが分かりません
395:デフォルトの名無しさん
09/06/04 23:03:46
世の中に自分で書いたソースが理解できない奴なんて居るの?
396:デフォルトの名無しさん
09/06/04 23:04:40
2年前のソース理解できませんでした。サーセンwww
397:341
09/06/04 23:04:55
>>373
えらい人だね
>>377
> CreateObject("Excel.Application")して
なるほど。 明日から出張なんで、帰国したら試してみる。
ありがとう。
398:デフォルトの名無しさん
09/06/04 23:37:34
スレタイ見ようぜ。
399:デフォルトの名無しさん
09/06/05 00:10:03
executeした後に、どこにファイル検索数を持ってるんでしょう?
プロパティやオブジェクトもググっても見つからないし、
executeしたらその.Executeの中身はすぐにhit数になってるし。
400:デフォルトの名無しさん
09/06/05 08:54:53
オブジョクト
401:デフォルトの名無しさん
09/06/05 08:56:30
オブジョイ
402:デフォルトの名無しさん
09/06/05 09:12:57
オブジョイト
403:デフォルトの名無しさん
09/06/05 09:46:46
EXCELの自動計算がとまってしまうことがあります
オプションの自動計算のチェックボックスはonのままです
とりあえずマクロの
Private Sub Worksheet_Calculate
を削除したところ止まらないようになりましたけど・・
原因がわかりません
404:デフォルトの名無しさん
09/06/05 21:45:53
Worksheets("Sheet1").Delete
これをVBAで実行すると、シートを削除するときに本当に消していいのかという
確認ダイアログを求められるのですが
これを出さずに強制的に削除する方法ってあるのでしょうか?
405:デフォルトの名無しさん
09/06/05 21:58:29
>>404
Application.DisplayAlerts = False
406:デフォルトの名無しさん
09/06/06 02:07:20
>>403
そのマクロの中身がわからんことには…
407:VBA暦12時間
09/06/07 14:49:37
すみません
初歩的な所ではまっています。
下記の処理は、
”■”なら16行目に値をカウント
”□”なら17行目に値をカウント
という処理をしています(4列目に実際に加算したい数値が入っています)
この場合、何回もボタンを押すとどんどん値がふえてしまうのでボタンをおしたタイミングで16行目と17行目を0クリアしたいのですが、
コメントにしている部分を解除にすると、なぜか計算がされません。(0のまま)
どなかたどうかご教授よろしくお願いいたします。
Private Sub CommandButton1_Click()
For 列 = 5 To 27
For 行 = 5 To 10
' Cells(16, 列) = 0
'Cells(17, 列) = 0
If Cells(行, 列) = "■" Then
Cells(16, 列) = Cells(16, 列) + Cells(行, 4)
ElseIf Cells(行, 列) = "□" Then
Cells(17, 列) = Cells(17, 列) + Cells(行, 4)
End If
Next
Next
End Sub
あと自分のレベルで参考になるVBAサイトもご紹介いただけると助かります。
よろしくお願いいたします
408:デフォルトの名無しさん
09/06/07 15:52:12
0にクリアするところはFor文の外にしなきゃだめだよ
409:VBA暦12時間
09/06/07 16:42:40
うわっ!俺あほだ!
ありがとうございました!
410:デフォルトの名無しさん
09/06/07 20:46:57
Option Base 1
Sub a()
Dim a
Dim b(3, 3)
'空いてる数字探し配列bに入れる
For n = 1 To 10000000
a = Range("a1:c3")
For i = 1 To 3
For k = 1 To 3
If a(i, k) <> 0 Then
b(i, k) = a(i, k)
End If
Next
Next
'実際に作成
For i = 1 To 3
For k = 1 To 3
If a(i, k) = 0 Then
'bにない数字を探す
Do
c = Int(9 * Rnd + 1)
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
411:410の続き
09/06/07 20:48:22
Loop
fjk:
b(i, k) = c
End If
Range("a10:c12") = b
Next
Next
Next
If (1 = 2) Then
Exit Sub
'ここまで
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
の時点で型が違いますとエラーが出ます、これは何故でしょうか?
ワークシート関数matchで検索し、配列bの中にcがあるかどうかを調べようとしているのですが、cがどんな数字でもエラーが出てしまいます。どうしてでしょうか?
コードの主な内容は、A1:C3を元に乱数で魔方陣を作ってみようというものです
配列aはA1:C3セルの数字、配列bは一時的な計算用配列です
412:デフォルトの名無しさん
09/06/07 21:43:55
型が違うってことは型が違うんだよ!さっさと死ね!
413:デフォルトの名無しさん
09/06/07 22:32:48
え・・
414:デフォルトの名無しさん
09/06/07 22:38:09
んー。癖が強すぎるコードだなぁ。
余談だけど、こんな書き方を推奨してる参考書でもあるの?
条件指定なしのdoを使ってる所見ると、他言語で覚えたかな。
if thenでGoToに飛ばすコードは記憶の限りでは初めて遭遇したんだけど、
他の言語だと一般的なのかな?後学の為に教えてください。
cが宣言無しで突如出てきてるのは、まぁ良いのか。
bは2次元配列のはずなのに、matchでは何も指定されてないけど、
そこが問題じゃない?
415:デフォルトの名無しさん
09/06/07 22:39:10
Windows:XP
オフィス:2003
VBAの勉強を始めようとセルの結合や色付けなど
ごく初歩的なマクロを使ってるのですが
マクロで実行した操作を戻ることはできないのでしょうか?
たとえばA1:B1セルの結合をすると
戻るボタンがグレーになり、保存せずに閉じて開きなおすしか戻る方法がありません。
これをマクロで実現するにはどうすればよいのでしょうか?
416:デフォルトの名無しさん
09/06/07 23:00:29
>>414
おお!ありがとうございます!!そこでした
doloopとgotoは今回始めて使いました。参考書とかは特に見ていません。
普通はuntilなどと組み合わせるのですね
ワークシート関数のmatchは↓のページを参考にしたのです
URLリンク(park7.wakwak.com)
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
でも
If (Application.Match(c, b, 0) >= 1) Then GoTo fjk
でも型が違うとエラーが出ます。何が悪いのでしょう?
↓できるだけまとめてみました
Option Base 1
Sub a()
Dim b(3, 3)
For i = 1 To 3
For k = 1 To 3
b(i, k) = 5
Next
Next
Do
c = 5
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
Loop
fjk:
End Sub
417:デフォルトの名無しさん
09/06/07 23:08:05
matchなんて使った事無いんだが、2次元配列内を一発で検索出来るのか?それ。
418:デフォルトの名無しさん
09/06/07 23:09:01
>>415
マクロで実行した物は戻せない。
結合したものを解除したいなら、結合を解けば良い。
419:デフォルトの名無しさん
09/06/07 23:12:48
>>417
可能ですよ。存在してたら数字、存在してなかったら型が違うとエラーになります。
ただ>>416ではウォッチ式見ても型も同じです
Sub a()
Dim myary
myary = Array( _
"加入者番号:", "加入者:", "会社名:", "登録日:", "加入日:", _
"予定事項:", "担当者:", "部門:", "区分:", "住所:", _
"請求書住所:", "電話:", "請求書電話:", "アドレス:")
MsgBox Application.Match("登録日:", myary, 0)
End Sub
420:デフォルトの名無しさん
09/06/07 23:12:53
>>416
釣りだよな?
421:デフォルトの名無しさん
09/06/07 23:14:54
>>420
違います。
本気で分からないので教えてくださいorz
422:デフォルトの名無しさん
09/06/07 23:15:54
>>419
それじゃ1次元配列じゃないか。
423:デフォルトの名無しさん
09/06/07 23:30:29
If (Application.Match(c, b(2, 2), 0) >= 1) Then GoTo fjk
b(2,2)が配列もしくは範囲ではないから
424:デフォルトの名無しさん
09/06/07 23:34:55
>>419
Sub test111()
Dim ar As Variant
ar = [{1,2;3,4}]
MsgBox Application.Match(1, ar, 0)
End Sub
2次元配列にmatch掛けられないじゃないか。
存在していても型エラー出る。
425:416
09/06/07 23:46:36
申し訳ございませんでした!
426:デフォルトの名無しさん
09/06/08 15:28:10
>>414
BASICではそもそもIF THENの後のGOTOは省略できるってほど
THEN GOTOが人気だったんだぜ…
>>416
この用途だと Exit Doで十分だな。
というか、今時GoToなんて苦行する必要ない。
GOTO 、GOSUBなんてのはユーザー関数が無かったころの名残。
427:デフォルトの名無しさん
09/06/08 20:31:59
テキストとか読み込みとき、Line InputとFileSystemObjectの機能とどっちを使うほうがいいの?
428:デフォルトの名無しさん
09/06/08 21:25:23
,-┐
,ィ─、ri´^-─- 、 .┌f^f^f^f^f^f^f^f^f^┐
く / , ,' ヽ ヽ| ~ ~ ~ ~ ~ ~ ~ ~ ~│
`<' / ,'レイ+tVvヽ!ヽト 知ってるが │
!/ ,' i |' {] , [}|ヽリ お前の態度が |
`!_{ iハト、__iフ,ノリ,n 気に入らない |
// (^~ ̄ ̄∃_ア____n_____|
_r''‐〈 `´ア/トr─!,.--'
<_>─}、 `」レ
'ヽ、 ,.ヘーァtイ
Y、.,___/ |.|
| i `ー'i´
429:デフォルトの名無しさん
09/06/08 22:04:04
昔はLine Inputだったけど、今ならFileSystemObjectを使うのが一般的
430:427
09/06/08 22:14:12
>>429
レスさんくすです
431:デフォルトの名無しさん
09/06/08 23:15:19
Function Line(args1)
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[args1]:R30000C[args1],RC[-1])"
こういう感じでargs1を変数にして呼び出し元で中身を変えて実行したいのですが
どうしてもうまく来ません
どうやればいいのか教えてください
432:デフォルトの名無しさん
09/06/08 23:46:53
>>431
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!R1C[" & args1 & "]:R30000C[" & args1 & "],RC[-1])"
433:デフォルトの名無しさん
09/06/09 09:50:58
俺なら
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", "1")
とやる事が多い
434:433
09/06/09 09:53:58
= replace("=COUNTIF(Sheet1!R1C[@]:R30000C[@],RC[-1])", "@", args1)
435:デフォルトの名無しさん
09/06/09 23:42:12
質問です。
例えばですが、「abcdefg」といった文字列に、「def」が含まれているか、
といった処理をさせようとしているんですが、どうやって比較したらよいのでしょうか?
*def*または、?def?の使い分けもできるようにしたいんですが、可能でしょうか?
436:デフォルトの名無しさん
09/06/09 23:50:42
>>435
InStr
正規表現
437:デフォルトの名無しさん
09/06/10 00:40:03
*def*と?def?の使い分けIをnStrでどうやるんだろ?
俺には分らんな。
Like演算子なら使い分けは簡単。
"abcde" Like "?bcd?"ならTrueだが
"abcdef" Like "?bcd?"ならFalseだ。
438:デフォルトの名無しさん
09/06/10 11:35:40
正規表現なら、
.*def.*
.def.
だぬ。
439:デフォルトの名無しさん
09/06/10 14:50:52
ADOからSQLで"*def*"とやるとエラーになんだよね
"%def%"もしくは"_def_"と覚えたほうがいいと思う
440:デフォルトの名無しさん
09/06/10 18:29:09
>>437
横スレだけど、
len(str) が5文字かつ、instrが2なら "?bcd?" に該当するんじゃないかな。
正規表現やlike演算子使った方が楽だけど。
441:デフォルトの名無しさん
09/06/10 18:29:21
×スレ
○レス
442:437
09/06/10 19:43:01
>>440
なるほど。
443:デフォルトの名無しさん
09/06/10 20:11:04
よこだっ!いいぞ!いいぞ!そう!よこっ!すれっ!すれっ!!よこすれっっ!!!
444:デフォルトの名無しさん
09/06/10 22:54:02
質問です。
「マクロ→セキュリティ→Visual Basicプロジェクトへのアクセスを信頼する」にチェックを入れるのを、
マクロで行う事って出来ないんでしょうか?
445:デフォルトの名無しさん
09/06/10 22:59:50
>>444
何のウイルスを配布するつもりなの?
446:デフォルトの名無しさん
09/06/10 23:16:43
OS:Windows XP Professional SP2
Excel:2000
以下2つなのですが、参照している列と値を格納する配列以外は全く一緒です。
引数の参照渡しとかでまとめることはできませんか?
Yousosu=0
For Each Youin In Range(Cells(36,3),Cells(49,3))
If Youin.Value="" Then
ReDim Preserve Joken1(Yousosu)
Joken1(Yousosu)=Cells(Youin.Row,2).Value
Yousosu=Yousosu+1
End If
Next
Yousosu=0
For Each Youin In Range(Cells(36,4),Cells(49,4))
If Youin.Value="" Then
ReDim Preserve Joken2(Yousosu)
Joken2(Yousosu)=Cells(Youin.Row,2).Value
Yousosu=Yousosu+1
End If
Next
447:デフォルトの名無しさん
09/06/11 00:54:09
できま
448:427
09/06/11 01:05:01
s(ry
449:デフォルトの名無しさん
09/06/11 02:13:20
すぇん
450:デフォルトの名無しさん
09/06/11 08:00:42
>>446
異なる部分を引数にもつ関数作れば?
451:デフォルトの名無しさん
09/06/11 09:59:51
>>446
やりたいことが分からんけど
Dim Joken(36 to 49, 3 to 4)
For i=36 to 49
If Cells(i, 3).value = "" Then
Joken(i, 3)=Cells(i, 2).value
endif
If Cells(i, 4).value = "" Then
Joken(i, 4)=Cells(i, 2).value
endif
Next i
452:デフォルトの名無しさん
09/06/11 13:06:37
>>444
レジストリ
453:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/11 20:51:04
>>445
>>452
ウイルスとかじゃなくて、あちこちアップデートが必要ににりそうなファイルを
自動でパッチあてる感じにしたいんだ
レジストリはVBEマクロでいじれるもんなの?
455:デフォルトの名無しさん
09/06/11 20:56:16
>>453
A1が日付なら
Range("B7").Resize(, 3).Value = Split(Format$(Range("A1").Value, "yyyy/mm/dd"), "/")
の1行で充分じゃね?
456:デフォルトの名無しさん
09/06/11 20:57:19
>>453
書式設定か、
Range("C7").Value = "0" & Month(myDate)
457:デフォルトの名無しさん
09/06/11 21:00:18
>>450
そうなのですが、いろいろ試してもうまくいかなくて…
>>451
すみません。どんな動作をしたいか、書いておくべきでした。
なるほど…2次元ですか。
ただ、できれば動的配列にしたいかなぁなんて思ってまして。
2次元だと、Preserveは片方にしか利かないとか。
ありがとうございました。また、自分でも考えてみます。
458:デフォルトの名無しさん
09/06/11 21:03:50
>>456
それじゃ10月は010になってまずいんじゃないかなぁ。
右2文字を取り出せばいいけどね。
459:デフォルトの名無しさん
09/06/11 21:25:21
>>455
>>456
サンクス
宣言した変数(例、TTTTTTT)に05を文字列として入力したい)
A1に2009/5/1と入力して、あるフォルダの2009年05月XXX.xlsというファイルを
読み込むマクロを書いています。
よろしくお願いします。
460:デフォルトの名無しさん
09/06/11 21:29:22
>>453
Range("C7").Value = "'" & Format(myDate, "mm")
これじゃダメかな?
461:デフォルトの名無しさん
09/06/11 21:35:54
>>459
Format$(Range("A1").Value,"yyyy年mm月XXX")の文字列を作ってWorkbokks.Openと組み合わせるだけ。
462:デフォルトの名無しさん
09/06/11 21:37:25
>>460
できました。
サンクス
, - ,----、
(U( )
| |∨T∨
(__)_)
463:デフォルトの名無しさん
09/06/12 01:08:40
取得した文字列を、すでに宣言した変数名と一致させて
使いたいのですが、できますか?
やりたいのは
Dim ABCDE As Integer
Dim moji As String
moji = AB
"moji"CDE = 5
みたいな感じです
464:デフォルトの名無しさん
09/06/12 03:32:11
>>463
変数はただの入れ物だから、無理じゃないかなぁ
何がやりたいか詳しく書いてくれたら、
別の方法になるかもしれないけれど、実現できるコードを考えられるかも
465:デフォルトの名無しさん
09/06/12 04:26:27
>>464
たぶん>>463が言いたいのはリフレクションを使って
動的に変数を追加・参照することは出来ないかってことじゃね?
そんなことをして、なんになるのか分からないが、そういうことだと思う
# javascriptで関数電卓のフレームワーク+プラグイン(関数やらが定義されてたりする)を作ったときに使ったくらいかな?
たぶん、VBAのリフレクションは貧弱だから出来なさそうな気がする。
だけど、サンプルを見る限り、連想配列で良いんじゃね?って思うな。
最終的にやりたいことは
userStatus("Jonson") = "空腹"
userStatus("Harris") = "眠い"
userStatus("cherry") = "ピヨピヨ来た"
ってことでしょ。
VBAでどうやって連想配列を使うか知らないけど。
# たぶん、つかえないだろうなぁ
# 無かったら、自分で作ればいいけど、速度面でどうなんでしょうねぇ。
# 下手なハッシュ関数作るより、 配列二つ並べて、逐一中身を検索した方が早かったりしてw
466:デフォルトの名無しさん
09/06/12 05:21:46
>>463
URLリンク(okwave.jp)
これみたいなカンジ?
467:デフォルトの名無しさん
09/06/12 06:05:14
>>465
なんか、全然わかってなくて書いちゃって恥ずかしいっす。
教えてくれてあんがと。
連想配列の使い方を調べたら、Dictionaryオブジェクトだらしいです。
468:463
09/06/12 07:51:24
"moji"CDEってのが変数ABCDEのつもりです
たとえば
takeda
aoyama
tanaka
sirakawa
aoyama
koyama
みたいな50種類くらいの名前がかぶりつつ列挙されてて、それぞれ何個
でてきたかしりたいのです。
変数 aoyama_name,koyama_name,takeda_name
と人数分の変数を宣言しておいて、セルの文字列を順に取得し、
その文字列に対応する変数にカウントしていく方法ができないかと
469:デフォルトの名無しさん
09/06/12 08:13:29
該当したらインクリメントすりゃ良いんでないかい?
Instrでもlikeでも正規表現でも、何でも良い様な気がする。
470:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/06/12 13:14:48
>472
こういうことができるんですね。
集計対象データが大量の場合は、いったん文字列変数にに","をはさんで連ねていくことになりますね。
Dictionaryの機能は半角英数の大文字・小文字の別とか日本語対応はどうなんでしょう。
474:デフォルトの名無しさん
09/06/12 13:25:58
>>473
あくまでもサンプルだから , で区切ったデータを用意したけど、
実際のデータはワークシートやファイルから読み込むのが普通。
キーワードには日本語も使える。英字の大小は区別される。
データを "鈴木,高橋,山田,田中,鈴木,高橋" に変えて試してみ。
475:デフォルトの名無しさん
09/06/12 14:28:42
50件程度なら重複チェックを省略しても、とりたてて問題はない。
For Each n In name '配列で集計
dic(n) = dic(n) + 1
Next
たったこれだけで集計できる。
データが増えると遅くなるけど。
476:デフォルトの名無しさん
09/06/12 16:22:18
UserFormから数式を入力させて、その数式に該当するセルに処理を行いたいのですが、
ヒントになるサイトか関数などあれば教えてください。よろしくお願いします
477:463
09/06/12 16:27:12
実は集計するだけではなく、
高橋 100点
三根 98点
山田 100点
高橋 100点
青山 97点
山田 99点
(50人くらい、データは1000件くらい)
で100点の人だけ集計して100点の高橋が何人いて、
100点の山田が何人いるみたいなことをしたかったので、
100点で検索して左のセルをみて、
文字列を取得して、その取得した文字列と
関連するの配列名にカウントしたかった
のですが、どうもdictionaryでできそうです。
みなさんありがとうございました。
478:デフォルトの名無しさん
09/06/12 16:27:50
「数式に該当するセル」が意味不明
実例を示せ
479:デフォルトの名無しさん
09/06/12 16:30:15
>>477
その程度ならVBAなんぞ使わんでも一発で集計できるがね
480:デフォルトの名無しさん
09/06/12 16:43:26
>>478
失礼しました
やりたいことは条件付き書式設定のようなことで、
例えば
30
20
50
60
40
80
というセルを選択した後、ユーザーフォームから数式を入力してボタンを押すと
数式に該当するセルに対して、処理を行うということです。
条件付き書式設定を使えというのは無しでお願いします。。。
481:デフォルトの名無しさん
09/06/12 17:31:32
列なの行なの?
なんなのその数字。
482:デフォルトの名無しさん
09/06/12 18:13:09
Chr(13)とvbCrlfの使い分けの判断は何?
483:デフォルトの名無しさん
09/06/12 19:49:23
vbCrLf = Chr(13) & Chr(10)
Chr(13) = vbCr
Chr(10) = vbLf
484:デフォルトの名無しさん
09/06/12 21:11:04
>>482
改行コードは状況によって変わることがあるから
Chr(13)とかChr(10)とかに固定すると具合が悪いこともある
485:デフォルトの名無しさん
09/06/12 21:20:26
ぜんぜん「数式に該当するセル」の説明になってない…
486:デフォルトの名無しさん
09/06/13 09:26:08
俺がエスパーすると
数式の解に該当する数字の入ったセル
487:デフォルトの名無しさん
09/06/13 10:58:14
数式: >=50
数式に該当するセル: 50 60 80
ってことじゃね
488:デフォルトの名無しさん
09/06/13 11:10:30
俺がエスパーすると、
フォームから「A2=A1+10」と入力する。A1に5が入っていたとしたらA2に15を入れる。
どうだ?
489:デフォルトの名無しさん
09/06/13 12:27:04
463が説明しようとする度にエスパーが大量に必要になりそうな悪寒
何をどうしたいのか細切れに話そうとしてるからますます判らん w
490:デフォルトの名無しさん
09/06/13 12:28:17
____
/_ノ ヽ、_\
o゚((●)) ((●))゚o ,. -- 、
/::::::⌒(__人__)⌒:::::: / __,>─ 、
| |r┬-| / ヽ
| | | | { |__
| | | | } \ ,丿 ヽ
| | | | / 、 `┬----‐1 }
| | | | / `¬| l ノヽ wwwwwwwwwwwwwwwww
\ `ー'ォ / 、 !_/l l / }
{ \ l / ,'
\ ´`ヽ.__,ノ / ノ
\ ヽ、\ __,ノ /
 ̄ ヽ、_ 〉 ,!、__/
491:デフォルトの名無しさん
09/06/13 16:20:49
>>480
数式からEvaluateで戻り値を求めて、その戻り値でフィルターにかけりゃいいじゃん。
それともフィルタオプションで検索条件範囲の1行目を空白にして、2行目に=A2=数式と書きだして抽出するとかね。
492:491
09/06/13 16:24:49
俺のエスパー度はマグニチュード7くらいの自信があるから上で間違いないな。
493:デフォルトの名無しさん
09/06/13 16:52:40
463まとめ
>>463
>>468
>>477
>>480
494:デフォルトの名無しさん
09/06/13 21:30:24
>>493
仲間はずれがいるぜ。
>>480は>>476だな。
495:デフォルトの名無しさん
09/06/13 22:23:18
/ ノノ ノノノ ヾヽ、ヽ
/ ノj ` ´ i |
i { ` , ,-,、´ i |
{ i )-―-'( i |
ヽ i ⌒ } |_,,,. -‐- 、
__)), ,ノ人 、_, ノ''"´ , \
/ ` ー--,. '´ . : :`( ゝ、
/ : : :: :´: . : :\ , ' ´_ ヽ
/ r´: : : : : : ,. ' ´ ヽ>'´ ,'ヽ!
/ γ: : ノ _ ,, 、,, ,,__i 。 ./ ; ,!
i ir' " ヽ ,,, ''' ´ `"7 :/
i |、 ° }, ' ` y' /
"'''‐‐- ...,,,_| ヽ、ー/ __ _/ /
`'''-,,,て ´  ̄ ̄ / ,イ
`''-、__/ / ` / ,! _,
`''-,,_ ,..、_,,..イ´ i'´ `ゝ''"´
\_ ,,,,,...ゞ、_ |ー-/
ミ〉 !r'´
ヽ ミ/、 /| i i }