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


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

Excel VBA質問スレ Part13



1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/

186 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:24:30 ]
ム板だよな?ここ・・・

187 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:52:50 ]
そっか今みどりの日だから祝日扱いなんだな

188 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:28:17 ]
質問をさせて下さい。スペックは
Windows2000
Excel2000
です。

シート1に

名前 日付 数 名前 日付 数 ・・・
A氏 10/1 12 E氏 10/3 10
B氏 10/1 11 F氏 10/2 10
C氏 10/2 10 G氏 10/4 11
D氏 10/3 10

のような感じでデータが横に長く入力されているのですが、
これをシート2に一括のデータとしてまとめたいです。

名前には重複はありません。日付のみ重複しています。

申し訳ありませんが、よろしくお願いします。

189 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:30:51 ]
>>188に補足です
シート2は
名前 日付 数
A氏 10/1 12
B氏 10/1 11
C氏 10/2 10
D氏 10/3 10
E氏 10/3 10
F氏 10/2 10
G氏 10/4 11



の形にしたいです。

190 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:41:35 ]
>>188-189
配列に入れたら簡単だよ。
それくらい人に頼らず自分で作れないとダメでしょ。

191 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:52:53 ]
配列にいれんでも
名前には重複がないんだったら
そのままシート2へコピーすればいいだけてしょ
1)A氏〜D氏までのセルをコピー
2)その下にE氏〜G氏までのセルをコピー
てな感じで ループ処理していけば

192 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:07:04 ]
>>188
もうちょっと具体的に。
シート1は縦4列?

193 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:11:29 ]
つか 丸投げな匂いがするのは気のせい?

194 名前:188 mailto:sage [2009/10/09(金) 22:28:11 ]
名前と日付と数でひとつのブロックになっていて、それが横に数十連なっています。
今までは手作業でコピーと貼り付けをしていたのですが
数が膨大になってきたので手作業ではまかなえなくなってしまいました。

とりあえず自分でマクロを組んでみたのですが、ブロックごとの数がまちまちで
シート2の一括データに空白が出来て穴あきデータになっていしまいます・・・



195 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:41:20 ]
>>155
希望に沿うか分からないですけど、作ってみました。
ttp://excelerthanexcel.blog103.fc2.com/blog-entry-1.html

3つのプロシージャをどう作るかを下の2択で迷い、後者にしました。
・ 祝日の性質別(固定日、第n月曜日、秋分春分)
・ 機能別(日付確定、曜日確定、1行出力)

よかったら参考にしてください。

196 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:57:49 ]
>>194
デキタヨー

Sub a()
  Set S1 = Sheets("シート1")
  Set S2 = Sheets("シート2")
  With S1
    R_max = .UsedRange.Rows.Count
    C_max = .UsedRange.Columns.Count
    R_dest = 2
    For c = 1 To C_max Step 3
      For r = 2 To R_max
        If .Cells(r, c) <> "" Then
           S2.Cells(R_dest, 1) = .Cells(r, c)
           S2.Cells(R_dest, 2) = .Cells(r, c + 1)
           S2.Cells(R_dest, 3) = .Cells(r, c + 2)
           R_dest = R_dest + 1
        End If
      Next
    Next
  End With
End Sub

197 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:08:29 ]
またコイツか・・・

何でわざわざSetするの?

198 名前:デフォルトの名無しさん [2009/10/09(金) 23:11:46 ]
>>195
本当にありがとうございます。助かります。
イミディエイトウインドウが表示されないです…

「春分秋分」については、月日は「春分日」「秋分日」、 曜日は「未定」
と表示すればよいのですが、その場合はどうすればよいか
教えていただきたいです。



199 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:14:50 ]
変数の宣言しないと分かりにくいかもねぇ。

200 名前:デフォルトの名無しさん [2009/10/09(金) 23:28:12 ]
198です。
イミディエイトウィンドウは表示されました。すみません。

201 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:29:33 ]
>>197
あとから修正する可能性のある部分を先頭にまとめてるだけだよ

202 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:38:16 ]
>>198
 >学校で授業でやっていて、「テストまでには出来るようにしておけ」
じゃなかった?

あんまり人まかせだと テストで 赤点てな事になるよ!

203 名前:195 mailto:sage [2009/10/10(土) 00:03:23 ]
>>198
自己解決したとはいえ、イミディエイトウィンドウぐらいは質問せずに自分で開きましょう。

ブログ内のコードをぐだぐだに編集して、結果だけは希望通りに出るようにしました。
質を下げたもので良ければ利用してください。

プログラム板にしては非常にぬるま湯的な対応をしてしまったことを
すごく後悔しています。でもまぁ、自分自身の勉強にはなったか。

204 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:17:17 ]
>>196
ちゃんと内容は見ていないがSet □ = Nothing をする癖をつけた方がいいと思うよ。



205 名前:デフォルトの名無しさん [2009/10/10(土) 00:51:40 ]
>>203
ありがとうございました。


206 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:10:37 ]
>>204
ローカル変数って、たとえオブジェクト型でもモジュールの出口で自動的に開放されるんじゃないの?

207 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:57:40 ]
礼儀だよ。

208 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 04:17:30 ]
モジュールが無事終了するとは限らないだろ

209 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 05:39:19 ]
>>204
いらないよ。

>>207
何の礼儀だよ?

>>208
だから?

210 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 06:03:58 ]
↑こいつ最高にアホw

211 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:23:40 ]
↓こいつ最高に天才www

212 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:05:40 ]
   ∩――、
  /(゚)丶_ 丶
  / (● (゚)|つ
 | (入_ノ ミ
 | (_/  ノ
  \___ノ゙ー-、
  /\    _ \
(⌒O /\   (_ノ
 \ノ  /  、  )0


213 名前:188 mailto:sage [2009/10/10(土) 10:16:15 ]
>>196
テストしてみたところ問題なく動きました。
本当にありがとうございます。

214 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:51:27 ]
>>210
羮に懲りて膾を吹く。
アプリ終了前にfreeしまくるがごとし。



215 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:23:40 ]
>>197
>>196を擁護すればSetした方が速いんだよ。
まぁCellsは遅いから、速くしたければ配列だろうけどね。
それからわざわざシート参照の変数をSet 変数 = Nothingとする必要はねーよ。
そんなこと気にするやつは、他にもっと気にすべきことが抜けてる場合がほとんどだ。


216 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:55:55 ]
>>196
>S2.Cells(R_dest, 1) = .Cells(r, c)
>S2.Cells(R_dest, 2) = .Cells(r, c + 1)
>S2.Cells(R_dest, 3) = .Cells(r, c + 2)
この部分は
S2.Cells(R_dest, 1).Resize(,3).Value= .Cells(r, c).Resize(,3).Value
と1行で書けそうだな。

217 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 13:10:30 ]
オブジェクトがデカいと
メモリが少ないようなマシンで
set=nothingしないとその後辛くないかな
何もないなら必要ないだろうけど。
試して言っている訳ではないです。

218 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:16:35 ]
プログラマはsetした後nothingしないなんていわない

219 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:06:03 ]
>>217
Worksheet型のオブジェクト変数はシートを作ってるわけじゃない。
ワークシートへの参照への参照だ。
メモリは32ビットCPUで4バイトだ。
マクロが終了すりゃちゃんと参照カウンタは0になる。
Set ** = Nothingを書くのを否定はしないが、書くのがあたりまえって意見は否定する。

220 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:02:13 ]
書くことを習慣づけろ

221 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:15:43 ]
いらないものを書くやつは馬鹿じゃね?

222 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:18:02 ]
これを習慣づけろっ!て言うことが
礼儀と呼ばれるんだろね
質問なんですが
他に礼儀ってどんなものが有りますか?

223 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:19:16 ]
>>221
如何に記述量を増やすかがプロなんだよ。
最小限で簡潔になんてアマチュアのやること。

224 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:22:39 ]
プロってすごいんだね。



225 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:26:09 ]
うるさい、黙ってNothing書け!

226 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:27:51 ]
なにこの流れww

227 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:36:46 ]
つまり、理由も根拠もないんだが、自分のやりたいことを他人に強制したいときの
エクスキューズが「礼儀」ってことだ。

228 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:45:54 ]
>>215
普通はSetした方が速いが>>196は未宣言のVariant型だから速くはならんね。
Nothing云々より変数宣言が大事だな。

229 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:57:25 ]
つまりプログラムにおいて礼儀とはK&Rであると

230 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:57:50 ]
で、それ百万回実行して何ms違うの?

231 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:59:54 ]
>>217
関数抜けたら解放されるんじゃ?

232 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:02:12 ]
>230
普通なら宣言しないほうが早い
でも場合によってはエラーが引き起こされたりメモリが足りなくなったりする
エラー処理するかどうかなんて人それぞれだし、押し付けるようなもんじゃないんじゃないん

233 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:16:56 ]
Excel2007

シート上にボタンを2つ貼りつけています。
動作はブックのコピー先をどこにするかだけの違いだけです。
そこでボタンは2つで同じマクロを呼び出し、どのボタンから呼ばれたか
によって動作を変えたいのですが、そういう事出来ますか?

フォーム上のボタンであれば、

Private Sub btn_A_Click()
CopyExec A
End Sub

Private Sub btn_B_Click()
CopyExec B
End Sub

みたいにそれぞれパラメータを与えて切り替えというのが出来ると思うのですが


234 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:33:54 ]
これから速度厨と礼儀厨の熾烈な戦いが始まります。



235 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:39:35 ]
>>233
貼りつけているのは、CommandButtonなの?

Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
End Sub

てのが出来るどこれとは違うのかな?

236 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:49:17 ]
10usくらいの差なんてどうでもいいよ

237 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:50:35 ]
おまえらもういいよムリしなくて
速度とかIndexとかVlookupとかピボットとかNothingとか全部ネタのクセに
わかってるからさ!

238 名前:235 mailto:sage [2009/10/10(土) 22:53:23 ]
同じマクロを呼び出したいのね

ただ
>フォーム上のボタンであれば、
以下の文面では
フォーム上でも同じマクロを呼び出してないけど
それはいいの?

239 名前:233 mailto:sage [2009/10/10(土) 22:55:20 ]
>>235
そうです。CommandButtonです。

それはフォームについてVBEで書く時ではないですか?

シート上に貼りつけて、対象マクロを選択する時ってマクロの登録(N)から
マクロを選択するけど同じのを選択した時に、どのように区別がつけられるのか?
と思いまして質問しています。どうなんでしょうか。


240 名前:デフォルトの名無しさん [2009/10/10(土) 22:56:50 ]
>>238

あれは CopyExec というマクロに対して、パラメータとして AまたはBを与えるという意味で
書きました。判りにくくてすいません。


241 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:01:50 ]
>>239
Excel2007じゃないんでなんとも言えないけれど
対象ボタンを右くりっくして
"コードの表示"をすると

シートオブジェクトのコード画面に
Private Sub CommandButton1_Click()

End Sub
とかできない?

242 名前:239 mailto:sage [2009/10/10(土) 23:08:48 ]
>>241
ボタンを右クリックして出てくるメニューの一覧が
切り取り
コピー
貼りつけ
------
テキストの編集
------
グループ化
順序
------
マクロの登録
コントロールの書式設定

でコードの標示というのはここからは出来ないみたいですが


243 名前:241 mailto:sage [2009/10/10(土) 23:12:16 ]
>>242
自分のExcel古いせいかメニューが違うようで

お力になれませんでした! すみません

244 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:41:15 ]
>>242
VBE開いてボタン貼り付けたシートのコードの表示すればいい




245 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:49:31 ]
デザインモードになってないだけじゃないの。
デザインモードにしてボタンをダブルクリックでVBEの画面になる。

246 名前:デフォルトの名無しさん [2009/10/11(日) 00:36:01 ]
エクセル2007で質問です。
アドインタブのユーザー 設定のツールバーのところにボタン1、ボタン2を作って、
ボタン1を押したら、ボタン1のEnabledをFalse、2をTrue
ボタン2を押したら1はTrue、2はFalseに設定したはずですが、
ボタン1を押したあと、ボタン2が押せる状態になっていません。タブを切り替えるとなぜかうまくいくんですが。
2007はこういう仕様なんでしょうか

247 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:43:51 ]
またーり行こうぜ

248 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:54:36 ]
タブってリボンのことか?


249 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:59:03 ]
>>239
同じマクロを呼び出した場合、呼び出し元の区別はつかんだろうな
パラメータが指定できるなら そこで区別つけるしかない

あと
フォーム上でもシート上でも
クリックイベントのプロシージャは利用できる

250 名前:239 mailto:sage [2009/10/11(日) 06:55:15 ]
>>249
>呼び出し元の区別はつかんだろうな

今回は同じマクロを使う事は諦めます。ありがとうございました。

251 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 07:38:14 ]
それActiveXコントロールのボタンじゃなくて、フォームのボタンだよね。
application.callerでボタンのテキストが取得できるから、それで判断。

252 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 08:04:41 ]
>>251
MsgBox "呼出し元 " & Application.Caller
でシート上のボタンでも呼出し元を判別する事が出来ました。ありがとう!

253 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 10:45:19 ]
あー、まだ見てたんだ。よかったよかった。
フォームのボタンに限らず、イベントの発火元は大抵わかるようになってるんだよ。
まぁ、中にはわからにものや、任意のマクロ(イベントハンドラ)を登録できないのもあるけどね。

254 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:46:13 ]
Private Sub CommandButton1_Click()
  MacroA pram:=1
End Sub
Private Sub CommandButton2_Click()
  MacroA pram:=2
End Sub

こういうのは駄目?



255 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:08:38 ]
いや、それでいいし、実を言えばフォームのボタンの処理もそうしたほうがいいんだ。
プログラマ的な説明だと、イベントハンドラ内に直接処理を実装すると、凝集度が低くなるから。

256 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:21:22 ]
>>凝集

臨床検査学以外で初めて聞いたよ。
まさか一般社会で聞く単語とは思ってもいなかった。

257 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:01:09 ]
ちょっと教えてもらっていいですか?
Cellsの使い方について
このスレでも時々みかけるんですが

a = Sheets("Sheet1").Cells(1,1).Value

a = Sheets("Sheet1").Cells(1,1)

は結果的に両方共 A1セルの内容を変数aに代入している事になっているのだけど
前者と後者の違いってあるのですか?

本来は、前者であるべきとは思いますが
後者を使った時の弊害ってなにかあります?

258 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:22:07 ]
>>257
人によってはデフォルトプロパティを中途半端に省略したソースを汚いと感じることもある。
自分一人で使うだけなら好きにすればいい。
あとは、タイピング量が数回増えるのも人によっては弊害と考えるかもしれない。

259 名前:257 mailto:sage [2009/10/11(日) 18:37:12 ]
>>258
結局の所どちらでも結果は一緒なんだから
どちらを使ってもいいんですね

ソースが綺麗か汚いかはその人の主観なんだから
あまり気にしません

とは言え 自分自身のソースみて汚いと感じる事があるんで
精進しなくては

ありがとうございます

260 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:48:33 ]
凝集度と結合度

261 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:13:40 ]
>>259
また荒れる原因になるかもしれないんだけど、
やっぱりデフォルトプロパティは省略すべきじゃないと思うよ。
range型に代入する時なんか、可読性云々じゃなくて、
後から見て訳が分からなくなる・・・時がある。

262 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:36:28 ]
個人的には最初は省略しないで書いた方がいいと思う。
で、覚えたら好きに書けばいいと思う。
覚えていれば省略しても、普通にも書けるが、覚えてないと普通には書けないと思うよ。

263 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:59:39 ]
者によっては、特にオブジェクトに大量にアクセスする場合など処理が冗長になることがある
原則的に省略しないほうがいいと俺も思うけど、場面場面で使い分けるべきではある

264 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:00:30 ]
C#に移行したいとかVBAが.NETベースになった時の事も考えて、
デフォルトプロパティは省略しない方がいいんじゃないだろうかと言ってみる
それならとばかりにWithステートメントを多用すると、
C#で「面倒臭ぇと」ボヤく事になる罠



265 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:09:21 ]
それもこれも言語の貧弱さが原因なんだよな

266 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:13:01 ]
単純ミス防止でoption explicit とか書くだろ
それと同じで曖昧な表現は極力明確にするほうが良いと思う
どこまでが曖昧な表現かは人によるw

267 名前:257 mailto:sage [2009/10/12(月) 01:14:57 ]
>>261-266
みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^

268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 06:01:17 ]
セルの値が数値ならValueじゃなくValue2が普通だから、必然的にプロパティは書くことが多いな。
Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。

269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:20:08 ]
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /


270 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:41:04 ]
A1A2・・・に単語が並んでいて
B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?

271 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:09:44 ]
>>270
そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある

272 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:18:16 ]
VBA使ってどうすればよいのでしょうか?
ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<

273 名前:デフォルトの名無しさん [2009/10/13(火) 19:14:30 ]
kwsk

274 名前:デフォルトの名無しさん [2009/10/13(火) 19:26:29 ]
ヒントだけでも教えてください。

1つのセルに1つの文字列が入っています。
各行はその文字列の集合とします。
その文字が何文字あるのかと、
各行の文字の全組み合わせ(各行の全部分集合)が全体の中で何個あるのか、
その結果を出力したいのですがどうしたらいいでしょうか?
例えば、
A,B,C,D
A,B
A,B,C
A
このように各セルに文字が入っていたとすると、
全体の中でAは4個、Bは3個、Cは2個、Dは1個あります。
また、組み合わせの個数は全体の中でそれぞれ、
(A,B)は3個、(A,C)は2個、(A,D)は1個
(B,C)は2個、(B,D)は1個
(C,D)は1個
(A,B,C)は2個、(A,B,D)は1個、(A,C,D)は1個
(B,C,D)は1個
(A,B,C,D)は1個となります。

これは具体的な例ですが、実際は何行何列でも何文字でも対応できるように一般化したいです。
意外と難しくてどうしたらいいかわかりませんでした。
こうすればできるだろうという方針だけでもどなたかご教授お願いします。



275 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:11:13 ]
A,B,C,D なのに A,C がマッチするのかよ。
Instrで文字列内を検索すりゃ良いんでない?

てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。

使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。

276 名前:デフォルトの名無しさん [2009/10/13(火) 21:53:11 ]
>>275
わかりにくい説明で本当すいません。
「A,B,C,D」は1つの文字列ではありません。1つのセルに1つの文字が入っています。
コンマの区切りでセルを表したつもりでした。
「A,B,C,D」の、AはRange("A1")、BはRange("B1")、CはRange("C1")、DはRange("D1")
とに入っています。

実際はAとかBでなく、りんごとかバナナみたいな1つの単語が1つのセルに入ることになりますが。
(A,C)は(りんご、バナナ)という組み合わせだと考えていただけたらわかりやすいかと思います。

使われる単語は無限ではありません。
それでも仰るとおり数が増えれば酷いことにはなりますが、
そこはまた別問題で解決する算段はあります。

(りんご、バナナ)という組み合わせが全体に何個あるか?という話なんです。
わかりにくい説明ですいませんが。

VBAで、ある集合の部分集合を全て列挙するやり方だけでもどなたか
ご教示してくださいませんか?
一応自分でも調べてみましたがわかりませんでした。

277 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:05:47 ]
>>274
ヒント モリケン

278 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:12:31 ]
>276

275氏も書いてるがInStrでOK。

にしても説明ヘタだな、君は。

279 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:29:15 ]
人に判り易く自分のやりたい事を説明するっつーのも訓練が必要っすよ。 w

他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。

(ここはExcel VBAスレだから或る程度は限定されてるけど)



280 名前:デフォルトの名無しさん [2009/10/13(火) 22:33:33 ]
>>275-279
すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・

281 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 23:35:10 ]
1列に必ず同じ文字が入るなら簡単だろ。
この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。



282 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:28:23 ]
270です。
VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・

283 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:04:49 ]
まずは日本語でどうぞ。

>1 ★5

284 名前:283 mailto:sage [2009/10/14(水) 11:06:50 ]
>2 ★5

だった;;



285 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:09:03 ]
データ→Webクエリ(で対象のアドレスを入れて)でシートに取り込むのをマクロで記録すればOK


ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる

286 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:13:47 ]
>>282
とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)

Sub 件数取得()

  kw = "ぬるぽ ガッ"

  Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
  ObjHttp.Open "GET", "www.google.co.jp/search?hl=ja&q=" & kw, False
  ObjHttp.Send
  src = StrConv(ObjHttp.responseBody, vbUnicode)
  Set ObjHttp = Nothing

  src = Mid(src, InStr(InStr(src, "id=resultStats") + 24, src, "<b>") + 3)
  src = Left(src, InStr(src, "</b>") - 1)

  Debug.Print "「"; kw; "」のヒット件数="; src

End Sub






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

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

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