1 :デフォルトの名無しさん:2011/08/04(木) 14:30:44.38
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/
18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/

前スレ:
Excel VBA 質問スレ Part19
http://hibari.2ch.net/test/read.cgi/tech/1305754555/

5 :デフォルトの名無しさん:2011/08/04(木) 22:11:49.66
workbookをたくさん扱うVBAを書いてるんですが、
workbookのブックナンバー(シートでも出てくるindexと呼ばれるヤツ)を取得するにはどうすればいいんですか?
エラーが出るばかりでエラいことになってるんですが・・・

62 :デフォルトの名無しさん:2011/08/08(月) 19:34:54.73

コードに「綺麗さ」を求める奴は大概トリッキーなコードを書いて後々保守する奴がそれで苦労させられるということを全く考えていない
所期の目的を達してなおかつ判りやすいというのを目標にすりゃぁいいものを



147 :デフォルトの名無しさん:2011/08/11(木) 16:58:04.39
ここ最近の流れって、ちょっと真面目に読むと笑えてくる。皆それぞれ独自の認識してるんだ。
VBAのクラスはただの構造体+メソッドだろ。多態もできないと言い切れるレベルなのに、オブジェクト指向って・・・()笑
あっ、もちろんこれは俺の中ではこうだって話だから、皆さんはそれぞれ自分の中のVBA像を語ってください><

148 :デフォルトの名無しさん:2011/08/11(木) 17:18:24.07
>>147
こんなこと結構するけど。

Class1.cls:
Private WithEvents m_sheet As Worksheet

Public Sub SetWorkSheet(ByRef aSheet As Worksheet)
  Set m_sheet = aSheet
End Sub

Private Sub m_sheet_Change(ByVal Target As Range)
  MsgBox m_sheet.Name & "!" & Target.Address & " was changed"
End Sub

ThisWorkbook:
Private m_sheets As New Collection

Private Sub Workbook_Open()
  Dim obj As Class1
  Dim aSheet As Worksheet

  For Each aSheet In Worksheets
    Set obj = New Class1
    obj.SetWorkSheet aSheet
    m_sheets.Add obj
  Next
End Sub

152 :デフォルトの名無しさん:2011/08/11(木) 17:55:27.53
>>148-149
がんばってるなぁ、でも馬鹿みたいとしか思えない。

ボケ防止に趣味でやってるなら止めはしないけど。


153 :デフォルトの名無しさん:2011/08/11(木) 18:00:07.66
セルがすごい複雑で優秀なクラス構造をしてるから、それを利用するという意見は少数なのか
もったいないなぁ

154 :デフォルトの名無しさん:2011/08/11(木) 18:03:32.38
逃げることしかできないへたれ

155 :デフォルトの名無しさん:2011/08/11(木) 18:07:03.76
>>152
同じ構造のシートで数十シート(可変)以上あるようなBookを読み込んで、
それぞれのシートに同じ処理を適用するような場合を思いつかない?

まあ、後は普通にクラスで実装した方が楽な場合は使うよ。
クラスなしにVBA用のxUnit実装してとか言われたら発狂もの。

158 :デフォルトの名無しさん:2011/08/11(木) 18:23:19.98
>>155
>それぞれのシートに同じ処理を適用するような場合を思いつかない?

そんなもん別に VBA でクラスなんぞ作らんでも作れるだろ?
まあ、がんばってクラス作ってくれてもいいんだけどね。

Excel 自体はそりなりにクラス構造が作られてるから普通に利用すりゃいいだけで、
VBA でクラス作らないといけないわけじゃない。
なので、>>153 とか何言ってるのか意味わからん。

ちなみにそれなりの機能を持つアプリで入出力が Excel の場合、最近は >>154
言うように C# で Excel 呼び出す方向に「逃げる」ようにしている。
でも、 Javascript だと、ちょっと嫌かも (w

180 :デフォルトの名無しさん:2011/08/12(金) 09:39:55.09
>>158
> そんなもん別に VBA でクラスなんぞ作らんでも作れるだろ?

じゃ、クラス使わずに>>148と同等の処理ができるコード示して。

> まあ、がんばってクラス作ってくれてもいいんだけどね。

がんばって、というのがよくわからないんだけど。>>148のどこががんばってる?

> ちなみにそれなりの機能を持つアプリで入出力が Excel の場合、最近は >>154
> 言うように C# で Excel 呼び出す方向に「逃げる」ようにしている。

永続化の手段としてExcel Bookを使う場合の話?
俺が話してるのは、UIの手段としてExcel Bookを使う場合なんだが。

197 :デフォルトの名無しさん:2011/08/12(金) 21:13:21.35
恥ずかしいってか、バカ相手にムキになり過ぎ。ほっときゃいいのに。

200 :デフォルトの名無しさん:2011/08/13(土) 01:55:13.14
>>197
バカは言い過ぎ
新しいことが受け付けられない
お年寄りになっただけ

206 :デフォルトの名無しさん:2011/08/13(土) 07:25:52.36
>>200
>新しいことが受け付けられない
>お年寄りになっただけ

進歩の止まった VBA ってお年より向け言語だろ?
ひょっとして、VBA のクラス使いこなしてる俺すげーと思ってる >>148 さんですか?

208 :デフォルトの名無しさん:2011/08/13(土) 08:20:51.73
そういえばうちのおじいちゃんも
切符の券売機でよくまごついてるなあ

210 :デフォルトの名無しさん:2011/08/13(土) 09:00:58.80
>>208-209
おまいらナイス!
実に素晴らしい例え方だわw
券売機(クラス)が使える普通の人は券売機でさっさと買って行ってしまえばいいし、
使えないおじいちゃんは窓口で買えばいいわな。

211 :デフォルトの名無しさん:2011/08/13(土) 10:06:21.91
>>206
クラス使えるとスゲーなんて発想になるのは君だけじゃない?
ここにいるほとんどの人は、使えるけど状況に応じてあえて使わないだけだと思うよ。

214 :デフォルトの名無しさん:2011/08/13(土) 11:36:52.17
俺がVBAでクラスを使って良かったと思えたのは、シューティングゲーム作った時かな。
不特定多数の敵や弾を、その種類毎にクラス作っておいて、
発生する時にインスタンスをぽこぽこ作って、コンストラクタで最初の位置を設定して、
後はコレクションに格納して、インターフェース使ってポリモーフィズムでそれぞれの敵や弾毎に別れた処理をぐるぐる回す。

らくちんw

215 :デフォルトの名無しさん:2011/08/13(土) 11:38:16.43
>>210
>券売機(クラス)が使える普通の人は券売機でさっさと買って行ってしまえばいいし、

こんなぼろい券売機もどきでなに言ってるんだ?

>>211
日本語ぐらいちゃんと読めよ...。

216 :デフォルトの名無しさん:2011/08/13(土) 11:41:03.00
>>214
>コンストラクタで最初の位置を設定して、

引数ももてないコンストラクタでどうやって設定したのか kwsk

219 :デフォルトの名無しさん:2011/08/13(土) 12:54:47.27
ごめん、「御老体向けの券売機もどき」で満足してる人だったんだね。

220 :デフォルトの名無しさん:2011/08/13(土) 15:08:52.91
>>219
満足とか意味不明。
無い機能は使えないし
ある機能は使えば便利な時に使うだけ。

君、自己満足の為にVBAでプログラミングしてるんだ。いい身分だねw

221 :デフォルトの名無しさん:2011/08/13(土) 16:54:43.79
>>220
>無い機能は使えないし
>ある機能は使えば便利な時に使うだけ。

それを「「御老体向けの券売機もどき」で満足してる」って言うんだけど...、
日本語不自由な人なのか?

俺は、機能がなくて不満なときは C# に逃げるけどね。

222 :デフォルトの名無しさん:2011/08/13(土) 18:18:13.81
>>221
あれぇ?
VS2010はプロフェッショナル以上のエディションなら直接EXCEL2010を.Net環境から開発出来るよねぇ。
古いのでやってるの?それともお金が無いの?
で、C#に逃げるって、それもクラス設計しないで作ってるの?
クラス図から直接コードに落とす機能も有ったりするのに?
それともやっぱりお金が無くて.NetFreamWorkだけ突っ込んでテキストファイルで一生懸命書いてコンパイルしてたりするの?w
ひょっとして、テスト環境とか作ったりリファクタリングする機能があるのも知らないんじゃないの?
俺はC#もVB.Netもやってるけど、スレ違いになるからわざわざ言わなかったのに。
そんなスレ違いの方向に持って行って何がしたいの?

229 :222:2011/08/13(土) 21:29:01.63
済まん。本当は>>214>>216とのやり取りで、>>216が少なくともObject指向のこと少しでも分かってたら
そんな質問は出て来ないだろうと言うことで、ろくすっぽ知らない事は分かってたんだ。
>>215>>216はそのレスのタイムスタンプから同一人物である可能性が極めて高いと判断した。
そして>>221でC#に逃げるとか言ってたから、ちょっと意地悪してみたくなったんだ。
ちょっと大人気なかったな。そこは素直に謝らせて貰う。済まんかった。

230 :デフォルトの名無しさん:2011/08/13(土) 21:40:15.07
>>222
一応 Professional は買ってもらってるけど、仲間内で使うちょっとしたツール作るだけに、Ultimate
(定価 160万) は、買えないよ。Office アプリは本職じゃないしね。

>そんなスレ違いの方向に持って行って何がしたいの?

いや今頃言われても...。
>>158 で2日も前に書いてるし、>>180?? あたりの話は理解できなかったのかなぁ。

231 :デフォルトの名無しさん:2011/08/13(土) 22:23:21.74
>>229
で、いつから VBA のコンストラクタにパラメータが指定できるようになったの?

232 :222:2011/08/13(土) 22:30:34.31
>>230
そこで会話を交わしているのは俺じゃないし、実は>>214も俺じゃない。
ま、信じるかどうかはそちらに任せるけど、
今そっちのレスを読み返してみたけど、どっちも本当は互いの言いたい事分かっててあえて意固地になって
戦ってる様にしか見えないぞ。
後、余計なお世話かもしれないが金が無いならWindoswPhoneの環境を見ると、あれはまだBetaだがまだ日本語の本も出てないくらい本気で最新だ。
開発環境も無料だしな。データベースとのやり取りを行う時SQLを使う事もないし、
基本UIの項目から直接値を取る様な事もしない。
構造化言語からObject指向言語に移行した時に味わった苦しみを次はObject指向を開発している人達が近々味わうだろうと
思わせる一品だ。
スレチだからこの辺にしとくわ。じゃあな。

233 :222:2011/08/13(土) 22:35:09.07
>>231
その関数自体の引数で渡せないなら他にどんな渡し方がある?
流石にここまで言えば分かってくれるよな?

234 :デフォルトの名無しさん:2011/08/13(土) 23:36:20.56
>>232
> データベースとのやり取りを行う時SQLを使う事もないし、

笑うところ?
まさか、Uiltimate で C# とか VB.net 使ってて、Linq 知らないなんてことはないよねぇ?

>>233
はぁ、関数? なにそれ。

まじで、さっぱりわからんから詳しく教えてくれ。

235 :デフォルトの名無しさん:2011/08/14(日) 00:09:42.10
>>234
なんだ、LINQを知っているのに>>233みたいなのは知らんのか。
覚える順序が滅茶苦茶だな。なんか胡散臭いなあ。
LINQを使うと言う事は既にObject指向の範疇から外れているものなのは知っているよな。
で、LINQを使うと言う事は他にも色々知っていなければ出来ない訳だが、それらの内Object指向の範疇で無いものに
どんなものが有るのか、どんな働きをするものなのか教えてくれよ。
後、そこまで豪語するなら「基本UIの範疇から直接値を使う事もしない」って言うのも当然知っている訳で、
本当は>>233見たいなのも知ってて言ってるんだよなぁ先生。じゃなきゃそこまで豪語出来ないもんなぁ。
おっと、スレチ過ぎだな。じゃあC#板で待ってるからとっとと来て説明してくれよ。

237 :デフォルトの名無しさん:2011/08/14(日) 00:26:33.26
>>235
Linq の話なんてどうでもいいから、>>216 に答えてくれよ。

239 :デフォルトの名無しさん:2011/08/14(日) 00:39:46.09
>>237
悪いがそこまで言われればどうでもいい訳には行かないなぁ先生。
あれだけ豪語してくれたんだから取り敢えず話を聞かせてくれないと
こっちも話す気になんかなれないのは分かるだろ?
説明してくれるのか、それとも本当にハッタリ君だったのか先にはっきりさせてくれ。
丁度いいスレ見つけたんだ。
【VB.NET】LINQ友の会【C#, C♯, C#】
http://hibari.2ch.net/test/read.cgi/tech/1202568694/
もうこれ以上このスレに迷惑掛ける訳にもいかないのも分かるよな?
じゃあ待ってるから

240 :デフォルトの名無しさん:2011/08/14(日) 01:00:55.51
>>239
豪語?
「MS」「SQL 使わない」「 C#/VB.net」とキーワードがあれば、"Linq" ぐらいは
知識としてあるだろ。
Windows Phone でも C# で Linq 使えるのは当たり前で、わざわざ言うほどの
ことじゃないはずだから指摘しただけ。

俺は SQL 書けるから、Linq なんて使ったことないし興味もない。

> もうこれ以上このスレに迷惑掛ける訳にもいかないのも分かるよな?

>>216 は、VBA の話なのでここで答えてくれていいよ。

241 :デフォルトの名無しさん:2011/08/14(日) 01:56:39.96
>>240
君、面白い事いうね。

>「MS」「SQL 使わない」「 C#/VB.net」とキーワードがあれば、"Linq" ぐらいは
>知識としてあるだろ。

平たく言うと、そのキーワードで今ググったって事だよね?
そう言うのは知識とは言わないよね。
で何、
>笑うところ?
>まさか、Uiltimate で C# とか VB.net 使ってて、Linq 知らないなんてことはないよねぇ?

何でLINQとエディションが関係有るのか説明して欲しいな。それと
Uiltimate?何でUiltimateだと思ったのかな?

>一応 Professional は買ってもらってるけど、仲間内で使うちょっとしたツール作るだけに、Ultimate
>(定価 160万) は、買えないよ。Office アプリは本職じゃないしね。

本当にProfessionalを持っているなら>>222で挙げた機能は、実は全て入ってる事知ってる筈だけど。おかしいねぇ。
MSDNのページででも調べちゃったのかな?
君はハッタリ君な上に嘘付きなのかな?

これらの事から言える結論は、君はC#やった事が有るとは到底俺には思え無いんだけど。
やっぱりちょっとC#のスレ来てちょこっとC#やってたってのを証明出来る様なコード書いて俺を納得させてくれよ。
逃げ回ってばかりでこのスレに迷惑掛け続ける訳にもいかないだろ?

242 :デフォルトの名無しさん:2011/08/14(日) 01:56:56.26
お前らスレ違いだから下らん論争は他でやれ
ここは質問スレだ

243 :デフォルトの名無しさん:2011/08/14(日) 02:02:02.74
>>242
外でやると言ってる訳だが、ハッタリ君が逃げ回って拒絶しているんだニンニン

244 :デフォルトの名無しさん:2011/08/14(日) 02:22:30.34
>>243
だったら放置しろ屑
弱いもの虐めすんなって小学校で教わらなかったのか

246 :デフォルトの名無しさん:2011/08/14(日) 03:00:54.19
>>241
> 本当にProfessionalを持っているなら>>222で挙げた機能は、実は全て入ってる事知ってる筈だけど。

本当におかしいねぇ、俺が使ってる Pro. には、「クラス図から直接コードに落とす機能」なんてないんだけど。
君の Ultimate にはあるんでしょ? Ultimate しかないしねぇ、その機能。

511 :デフォルトの名無しさん:2011/08/29(月) 14:03:26.48
セルのチェンジイベントに関して教えて下さい。
セルにキーボードから入力した場合はチェンジイベントが発生するのですが、
たとえばA1からA10までの集計をSUMでA11に表示する場合、A11ではイベントが発生しません。
セルの表面上の値が変わった時に発生するイベントを教えて下さい。

513 :デフォルトの名無しさん:2011/08/29(月) 14:49:25.52
>>511
A11 の値をどこかに覚えておいて、Calculate イベントで更新されたことを
見る方法しか思いつかない。

514 :デフォルトの名無しさん:2011/08/29(月) 14:58:03.89
>>513
ありがとうございます。
ググっていてcalculateイベントにたどり着きました。
それで、改めて質問をしたいのですが、
自分のやりたい事は、このcalculateイベントが起きたセルによって
処理を変えたいので、どこのセルで起きたかを知る方法です。
よろしくお願いします。

643 :デフォルトの名無しさん:2011/09/05(月) 22:08:26.92
逐次探索のプログラムについて

Cells(1, 1) = 11
Cells(1, 2) = 24
Cells(1, 3) = 36
Cells(1, 4) = 44
Cells(1, 5) = 58
Cells(1, 6) = 64
Cells(1, 7) = 77

Sub 逐次探索()
Dim k As Integer, j As Integer
k = InputBox("数字を入力してください。")
For j = 1 To 7
If cells(1, j) Then
Exit For
End If
Next
If cells(1, j) Then
MsgBox j & "番目です"
Else
MsgBox "無いよん"
End If
End Sub

ここまで、自力で作成しましたがどんな数を入れても、
"1番目です"としか出ません。
どなたか対処法をお願いします。

661 :デフォルトの名無しさん:2011/09/06(火) 21:36:36.64
逐次探索

>>643と条件は一緒で、自分なりに考えたのだが…

Sub 二分探索()
Dim i As Integer, j As Integer, k As Integer, m As Integer
k = InputBox("数字を入力してください。")
i = 1
j = 7
Do While i <= j
m = (i + j) / 2
If cells(m) = k Then
MsgBox m & "番目です。"
ElseIf cells(m) > k Then
j = m - 1
MsgBox j & "番目です。"
Else
i = m + 1
MsgBox i & "番目です。"
End If
Loop
End Sub

 どんな数入れても、5番目、7番目、8番目と出てしまう。
 訂正お願いします。


http://hibari.2ch.net/test/read.cgi/tech/1312435844/l50人気ブログランキングへ