Excel VBA 質問スレ Part32
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/10/07(月) 22:19:55.86★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part31
http://toro.2ch.net/test/read.cgi/tech/1376371376/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0497491
2014/01/20(月) 01:39:46.172003じゃないか。
売り切れじゃないか。
0498デフォルトの名無しさん
2014/01/20(月) 02:04:59.15国外追放レベルのバカだな
Excelのバージョンが変わってもクラスの使い方なんてほぼ同じだし、本屋はここ1軒だけじゃないし
世の中には図書館という便利な物がある
この程度のこといちいち教えなきゃわからんのか
おまえはプログラミングするな質問するなするな迷惑だ
0499491
2014/01/20(月) 02:23:26.65もともとおかしいんだよ、きみの顔は。
http://blog-imgs-48.fc2.com/a/y/a/ayaushi/201303301847509b1.jpg
0500デフォルトの名無しさん
2014/01/20(月) 07:17:48.73自分の品位を貶めるだけの行為だって気付かないのかな?
まぁ>>498も口が悪いが
「確かにその通りだけど、国外追放レベルはヒドス・゚・(つД`)・゚・ 」
くらいの、余裕を持った返しが出来る大人になろうぜ
0501デフォルトの名無しさん
2014/01/20(月) 07:22:07.74まぁVBAでそんなに無理してまでクラスモジュールを使わなくてもコードは組めるってことだね。
本当にきちんとクラスについて勉強したいなら、JavaやC#を勉強した方がいい。
VB.Netですらデザインパターンを踏襲した様なきちんとした本は見たことが無い。
0502デフォルトの名無しさん
2014/01/20(月) 08:19:32.85継承とかコンストラクタに引数渡せないとかたいして便利じゃないから
あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
0503デフォルトの名無しさん
2014/01/20(月) 08:43:55.01そりゃ昨今のメジャーな言語と比べて、相対的に便利かと言ったら便利じゃないけど
どの言語を使うかって話ではなく、VBAを使う上でクラスを活用するかどうかって話では
他言語と比べて便利かどうかという相対的な話ではなく、絶対的に便利かどうかであって
その観点で見れば、スキルさえあれば十分便利に活用できる
いろいろ不足はあってもどかしい部分も多いけど、使わないよりは使った方が遙かに便利という意味でね
0504デフォルトの名無しさん
2014/01/20(月) 10:46:52.40その例えで行くなら、VBAを使う上でクラス有りとクラス無しを比較して相対的にどうか、って考えなきゃ
0505デフォルトの名無しさん
2014/01/20(月) 11:54:18.370506デフォルトの名無しさん
2014/01/20(月) 14:18:53.69インターフェイス継承はできるし、どうしても引数ありでオブジェクトを作りたいならFactoryメソッドを作ればいい。
> あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
機能毎にアドインにまとめればいいんじゃないかな。
0507デフォルトの名無しさん
2014/01/20(月) 14:37:20.31http://www.objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/dp-ocp-2.html
の音符の例。
Note.cls:
Public Sub Play()
End Sub
Half.cls:
Implements Note
Private Sub Note_Play()
Debug.Print "play half"
End Sub
Quater.cls:
Implements Note
Private Sub Note_Play()
Debug.Print "play quater"
End Sub
(続く)
0508デフォルトの名無しさん
2014/01/20(月) 14:38:35.12Staff.cls:
Private mNotes As New collection
Public Sub AddNote(ByRef aNote As Note)
mNotes.Add aNote
End Sub
Public Sub Play()
Dim aNote As Note
For Each aNote In mNotes
aNote.Play
Next
End Sub
Module1.bas:
Sub PlayStaff()
Dim myStaff As New Staff
myStaff.AddNote New Half
myStaff.AddNote New Quarter
myStaff.AddNote New Half
myStaff.Play
End Sub
という感じでVBAでも実現可能。
(Collectionが順番を保証しないというのは、今回は無視)
0509デフォルトの名無しさん
2014/01/20(月) 14:53:56.460510デフォルトの名無しさん
2014/01/20(月) 15:09:55.04基本的にはAddした順だけど、仕様としてそれは保証されてない
0511デフォルトの名無しさん
2014/01/20(月) 22:32:00.44指定位置勝手に変わると話にならんわけだが、ホントに保障されてないのか?
0512デフォルトの名無しさん
2014/01/20(月) 22:59:04.99仕様見ればわかることを他人に聞くな
0513デフォルトの名無しさん
2014/01/21(火) 00:04:41.49Object指向言語というより
Object指向に片足突っ込んだ構造化言語かな。
どうもMicroSoftはこんな片足突っ込んだような状態が好きなのか、
.Netフレームワークも関数型言語に片足突っ込んだObject指向言語っぽいよね。
「Object指向は考え方」って人もいるだろうけど、VBAの場合は上のレスに有ったような
面倒なストラテジーパターンも、.Netではシュチュエーション次第でもっと簡単なテンプレートパターンで書けるしね。
0514デフォルトの名無しさん
2014/01/21(火) 01:11:35.57>>502 は別に他の言語と比較してる訳じゃないんだが...
まあ、使いたいなら使えばいいんじゃね?
スキル誇示したいお年頃みたいだし (w
0515デフォルトの名無しさん
2014/01/21(火) 06:25:03.06インターフェース継承って何?
このコードの内、何が何を継承してるの?
見た感じ、インターフェースを実装して
処理を移譲することで似たような効果をもたらしているだけにしか見えないんだけど。
0516デフォルトの名無しさん
2014/01/21(火) 08:12:19.84こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
0517デフォルトの名無しさん
2014/01/21(火) 09:30:04.82皆に否定されて悔しかったんだね...わかります (w
0518デフォルトの名無しさん
2014/01/21(火) 10:10:47.90こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
0519デフォルトの名無しさん
2014/01/21(火) 10:25:24.40用語等については異論もあるでしょうが、重要なのは>>507のリンク先のC++のポリモーフィズム同等のことがVBAでも実現できることです。
この範囲で実現できるものであれば、VBAでもクラスが活躍できます。
それから、言わずもがなですが、クラスを使うことによるカプセル化の恩恵も受けます。
このことは、xUnitと親和性が高いです。
それと、WithEventsを使ったExcelオブジェクトとのEventを介したやり取りも便利です。
0520デフォルトの名無しさん
2014/01/21(火) 16:57:10.56INPUT: URL
OUTPUT: 「ショートカットファイル」 on デスクトップ
ファイル名はなんでもいいです。
0521デフォルトの名無しさん
2014/01/21(火) 16:58:07.68スレ違い
0522デフォルトの名無しさん
2014/01/21(火) 20:11:15.04中身は単なるテキストファイル、拡張子はurl、そんだけ
0523520
2014/01/21(火) 21:40:16.22でもメモ帳では開けないですよ。
0524デフォルトの名無しさん
2014/01/21(火) 21:40:19.010525デフォルトの名無しさん
2014/01/21(火) 21:58:29.65で?
よく分んないけど、これを継承と言うなら
これでフォームやボタンを継承して
何か作ってみてよ。
0526デフォルトの名無しさん
2014/01/21(火) 22:06:05.11普通に開ける
0527デフォルトの名無しさん
2014/01/21(火) 23:07:21.24まあ、がんばれ (w
0528523
2014/01/22(水) 00:26:27.94あ、ひらけた
でも、バイナリファイルになってるんですよ
0529デフォルトの名無しさん
2014/01/22(水) 02:37:51.49そいつは拡張子がlnkじゃないか?
IEのお気に入りの中のどれかを開いてみ
0530デフォルトの名無しさん
2014/01/22(水) 02:39:50.870531デフォルトの名無しさん
2014/01/22(水) 03:53:34.96負け惜しみはその辺にしとけ
0532デフォルトの名無しさん
2014/01/22(水) 07:37:22.14あー負け惜しみ、負け惜しみ。
負け惜しみでもなんでもいいから
早く>>525をやってみてくれよ。
場合によって継承は移譲で代用出来るというだけのことを
なんでわざわざ「インターフェース継承」なんて言っちゃうのか。
用語の違い云々って言ってるけど、デザインパターンどうのと言ってるところの
リンク貼ってるくらいだから
その観点からも継承と移譲はそれぞれどう言う時に使うかの違いくらいは分かってるんだろ?
ポリモーフィズムなんてのは100も承知で言ってるんだよ。
移譲はあくまで移譲であって、継承の代用に出来る場合があるだけで
用語の違いとかじゃなくて、そもそもが全くの別物だろ。
0533デフォルトの名無しさん
2014/01/22(水) 07:42:27.38まで読んだ
素直でよろしい
0534デフォルトの名無しさん
2014/01/22(水) 10:40:37.99> 早く>>525をやってみてくれよ。
VBAで「継承」ができるとは誰も言ってないと思います。
> なんでわざわざ「インターフェース継承」なんて言っちゃうのか。
かなり昔から、VBA(VB6)のimplementsを使ったコレのことを「インターフェース継承」と言う人が多いです。
語源は、Microsoftかもしれません。
なお、Microsoftはコレのことを委譲とは言わず委任と言っているようです。
> 5.1.3| 事前バインディングによるポリモーフィックなプログラム
> Visual Basic 6の開発者は、さらにもう1つの別の方法で継承を実装することができます。それは、いわゆる
> 「インターフェイスの継承」と呼ばれる方法です。この魅力的な名前は、Implementsステートメントを使用する
> 非常に一般的な方法を表しています。この方法では、基本クラスからメソッドのシグネチャだけを「継承」し、
> その実装は継承しません。したがってこの場合にも、実際の処理を行うすべてのプログラムは、それぞれの
> 開発者の責任において記述しなければなりません。
http://msdn.microsoft.com/ja-jp/library/dd297718.aspx
0535デフォルトの名無しさん
2014/01/22(水) 13:42:42.47> 移譲はあくまで移譲であって、継承の代用に出来る場合があるだけで
> 用語の違いとかじゃなくて、そもそもが全くの別物だろ。
イジョウを正しく変換できない奴にあれこれ言われたくないが、同じか別物かなんて
ことはどうでもいいことで、それで何ができるのかが重要。
0536デフォルトの名無しさん
2014/01/22(水) 13:47:58.08なんにしても言葉の定義なんてTPOで変化するんだから水かけあったって無意味だろ
0537デフォルトの名無しさん
2014/01/22(水) 13:51:58.320538デフォルトの名無しさん
2014/01/22(水) 14:01:12.250539デフォルトの名無しさん
2014/01/22(水) 14:15:26.81他の言語のクラスを知って、
「VBAのクラスを見下す俺博識でカッケー」
をやりたいだけでしょ
だから毎度のことだが直ぐに崩されて泣きを見る
0540デフォルトの名無しさん
2014/01/22(水) 21:58:27.42どっちかって言うと VBA でもできるもんって言ってる奴が自爆してるとしか思えんが (w
まあ、C#A を実装すればこんな不毛な争いは起きないので、早めに頼むよ ⇒MS
0541デフォルトの名無しさん
2014/01/22(水) 22:21:24.540542デフォルトの名無しさん
2014/01/22(水) 23:13:00.82カッケー(ワラ
最高にアホっぽい表現だな(藁)
0543デフォルトの名無しさん
2014/01/23(木) 00:30:34.26月給手取り20万でちょうカッケーw
0544デフォルトの名無しさん
2014/01/23(木) 02:29:35.460545デフォルトの名無しさん
2014/01/23(木) 05:26:49.000546デフォルトの名無しさん
2014/01/23(木) 07:21:56.98ゴミ
0547デフォルトの名無しさん
2014/01/23(木) 07:46:04.62本当に糞だったら突っかかる必要すら無いもんなw
0548デフォルトの名無しさん
2014/01/23(木) 09:24:18.49Excel と Visual Studio の区別もつかんのか (w
0549デフォルトの名無しさん
2014/01/23(木) 11:09:02.52これをまず上方向に重力があるときみたいに入力セルを上に落とし (←テトリスの逆バージョンみたいに)
さらに左方向に重力があるときみたいに入力セルを左に落とすには
どういうコードにすればいいですか?
0550デフォルトの名無しさん
2014/01/23(木) 11:38:08.59「落とす」って途中経過も表示するの?
それとも最終結果だけ表示するの?
0551デフォルトの名無しさん
2014/01/23(木) 11:52:16.81普通にループで条件判断すればいいだけじゃね?
それが解らないとかなら、まだVBA使うのは君には早いから
勉強してでも達成したいか、勉強するくらいなら諦めるか、好きな方を選んでね
0552デフォルトの名無しさん
2014/01/23(木) 12:30:05.05縦横両方となると何がしたいのかわからなくて根本から間違ってる気がしてくる
0553デフォルトの名無しさん
2014/01/23(木) 15:57:23.33左へ移動してから下へでは、結果が違ってくる
下へ移動してから、左へ移動したいの?
サメガメに似ているような
0554デフォルトの名無しさん
2014/01/23(木) 16:01:46.440555デフォルトの名無しさん
2014/01/23(木) 16:18:13.03> 下へ移動してから
もうここから違うし (w
0556デフォルトの名無しさん
2014/01/23(木) 18:13:05.910557デフォルトの名無しさん
2014/01/23(木) 18:14:28.47> まあ、C#A を実装すればこんな不毛な争いは起きないので、早めに頼むよ ⇒MS
こういうの使えば?
ttp://outofmem.tumblr.com/post/62233308198/excel-dna-1
0558デフォルトの名無しさん
2014/01/23(木) 20:13:31.821.まず入力セルの1つ上のセルに値が入っていたり入力セルが1番上だったら3へ。
2.End(xlUp)で自分より上のセルに値がある時のセル位置を求める。求めたセル位置に
値があればその1つ下のセルに、値がなければその位置に入力セルの値を入れて元の入力セルの値を消す。
3.入力セル(2を通っていたら2で値を入れたセル。以降入力セルと呼ぶ)の1つ左のセルに値が入っていたり入力セルが1番左だったら5へ。
4.End(xltoLeft)で自分より左のセルに値がある時のセル位置を求める。求めたセル位置に
値があればその1つ右のセルに、値がなければその位置に入力セルの値を入れて元の入力セルの値を消す。
5.処理を終了する。
多分こんな感じでループを使わないで出来る・・・ような気がする。
0559デフォルトの名無しさん
2014/01/23(木) 20:25:59.04いいねコレ、Linqも使えるのか。
ぱっと見た目、WorkSheetsもジェネリック扱いっぽいし。
ってことは多分、列や行もそんな扱いなんだろうね。
後は仕事場で使う許可が下りるかどうかだけど。
0560549
2014/01/23(木) 23:22:56.75ちょっと1分間空想してるだけで下のコードを思いつき、動作確認すると問題なく動き一瞬で解決した。
たった4行で実現できることだよ。
Sub Unko()
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlToLeft
End Sub
0561デフォルトの名無しさん
2014/01/23(木) 23:59:48.40それで、だからどうしたの僕ちゃん
ほめて欲しいのかちゅら
すご〜イ、良く頑張ったわね、偉いわよ僕ちゃん
0562デフォルトの名無しさん
2014/01/24(金) 00:03:57.36次は30行でテトリス作ってみてよ。
0563デフォルトの名無しさん
2014/01/24(金) 01:24:52.940564デフォルトの名無しさん
2014/01/24(金) 01:26:27.06自治厨うぜーぞ
誰もお前なんか必要としてないんだから早く消えろ
0565デフォルトの名無しさん
2014/01/24(金) 01:55:32.380566デフォルトの名無しさん
2014/01/24(金) 07:27:32.48ドヤ顔のとこ悪いけど、それって上と左に飛ばす対象セルの
下や右に入ってる値の入っているセルも一緒にずれない?
そうだとしたらコードもダメだけど、動作確認もダメダメだね。
0567デフォルトの名無しさん
2014/01/24(金) 10:57:23.360568デフォルトの名無しさん
2014/01/24(金) 11:55:35.88ゴミコードw
0569デフォルトの名無しさん
2014/01/29(水) 23:46:00.47こんどはスマホで自作アプリをいっぱい作りたいです。
プログラミング言語は変わるんですよね?
どの入門書を読めばいいでしょうか?
VBAの知識があるのでプログラミング全般の基礎(変数の使い方、if文、for文、など)は省いて
android開発に特化した入門書を希望なのですが。
0570デフォルトの名無しさん
2014/01/29(水) 23:59:50.67スレチ
泥は基本Java
VBAの知識なんてほとんど役に立たん
0571デフォルトの名無しさん
2014/01/30(木) 00:09:17.85どういう意味?
これ?
http://www.geocities.co.jp/HeartLand/6622/potato.jpeg
0572デフォルトの名無しさん
2014/01/30(木) 00:15:08.28馬鹿かオメェは
580もjavaやれって言ってるだろ。
andoroidでどうしてVBAって発想がでてくるんだよ
0573デフォルトの名無しさん
2014/01/30(木) 00:19:24.55なるほどぉー。そうなんだー。
0574デフォルトの名無しさん
2014/01/30(木) 00:20:19.410575デフォルトの名無しさん
2014/01/30(木) 03:00:00.80クラスモジュール内から、標準モジュールのパブリックなプロシージャを呼ぶのは設計としてはアリですか?
0576デフォルトの名無しさん
2014/01/30(木) 07:30:04.35有り。
ただし、インスタンスを生成してる訳ではないので、
呼び出し先の内容はすべて一緒になることに注意。
0577デフォルトの名無しさん
2014/01/30(木) 10:03:18.86> クラスモジュールAの中で、クラスモジュールBをインスタンス化して利用したり
これはあり。
> クラスモジュール内から、標準モジュールのパブリックなプロシージャを呼ぶのは設計としてはアリですか?
これはお勧めできない。
詳しくは「結合度」でググれ。
0578デフォルトの名無しさん
2014/01/30(木) 10:45:28.97留意すべきことがあるなら理解できる
0579デフォルトの名無しさん
2014/01/30(木) 11:04:28.31危険がありすぎるので過剰とは思わない。
0580デフォルトの名無しさん
2014/01/30(木) 11:29:33.90コメントに書くとかUMLで管理するとかいくらでもフォローきくじゃん
標準なパブリックは使わないならその需要はどうやって埋めてんの?
0581デフォルトの名無しさん
2014/01/30(木) 11:35:19.10> コメントに書くとかUMLで管理するとかいくらでもフォローきくじゃん
そういう問題じゃなくて、結合度やカプセル化の問題。
> 標準なパブリックは使わないならその需要はどうやって埋めてんの?
使わないとは言ってないよ。クラス内部からは呼ぶべきではないと言ってるだけ。
0582デフォルトの名無しさん
2014/01/30(木) 12:36:50.72>クラス内部からは呼ぶべきではない
その代替案をご教示賜りたく
これで疑問は全て解消される気がする
0583デフォルトの名無しさん
2014/01/30(木) 12:39:05.54> その代替案をご教示賜りたく
代替案も何も、俺は基本呼ばないから代替案も糞もないんだが。
0584デフォルトの名無しさん
2014/01/30(木) 12:40:36.330585デフォルトの名無しさん
2014/01/30(木) 13:29:20.03じゃあやっぱり留意すべき程度じゃないのか
0586デフォルトの名無しさん
2014/01/30(木) 14:02:40.66好きにすればいいんじゃないかな。
0587デフォルトの名無しさん
2014/01/30(木) 14:14:19.760588デフォルトの名無しさん
2014/01/30(木) 15:52:36.82>>577は結合度の問題だっていってるだろ
そのUtilクラスなり標準モジュールなりに依存するようになるから
クラスの独立性が保てなくなるって話だろ
設計方法論の話であって実装の問題じゃないからな
他のモジュールに依存するクラスを良しとするなら良し
ただし一般的なクラス設計では、他のクラス(モジュール)への依存度は低い方が良いとされてる
0589デフォルトの名無しさん
2014/01/30(木) 16:03:53.460590デフォルトの名無しさん
2014/01/30(木) 16:22:09.70標準モジュール名をUtilに変更して使うのと、C++でstd namespaceにある奴を使うのと、そんなに違いはないと思うけど
0591デフォルトの名無しさん
2014/01/30(木) 17:36:51.01標準モジュール使うのにモジュール名で修飾することなんてほとんどないぞ
もしかして、標準モジュールってそこにメソッドなりがシステム側で用意されてると思ってるのか?
システム側で用意されているものに依存するのと
ユーザ側で用意するのものに依存するのと
そんなに違わないと思うならそれでいいんじゃないかね
0592デフォルトの名無しさん
2014/01/30(木) 18:23:41.57> 標準モジュールの名前なんてどうでもいいんだけど、何でそこにこだわってる?
> 標準モジュール使うのにモジュール名で修飾することなんてほとんどないぞ
グローバルな何かを使うときに、気をつけないといけないのが名前衝突。
標準モジュールでも名前を付けて呼ぶときにそれで修飾しておけば、別の標準モジュールに同名のメソッドが作成されても問題無い。
加えて、他の言語でよくある「namespace」的な役割も持たせられる。
> もしかして、標準モジュールってそこにメソッドなりがシステム側で用意されてると思ってるのか?
何を言ってるんだかわからない。
> システム側で用意されているものに依存するのと
> ユーザ側で用意するのものに依存するのと
> そんなに違わないと思うならそれでいいんじゃないかね
Utilクラスを作ってそこに自作メソッドを入れて使うのと、標準モジュールに名前を付けて使うのに、それほど差はないよねって話。
0593デフォルトの名無しさん
2014/01/30(木) 19:11:22.87>Utilクラスを作ってそこに自作メソッドを入れて使うのと、標準モジュールに名前を付けて使うのに、それほど差はないよねって話。
依存関係においてはクラスだろうが標準モジュールだろうが大差ない
Utilクラスに依存するのはOKなのにUtil標準モジュールに依存するのはダメとかいうのは話がおかしい
つまり標準モジュール呼び出しの代替案がUtilクラスにまとめるってのはおかしな話だが、それは俺の意見じゃないぞ
0594デフォルトの名無しさん
2014/01/30(木) 19:48:24.290595デフォルトの名無しさん
2014/01/30(木) 22:18:37.25それこそ標準モジュール向きだと思うけどなぁ。
>>582
代替え案としては、クラスモジュールで作っておいて
そのインスタンスを、使う側のクラスのプロパティに設定して内部で使う。かなぁ。
0596デフォルトの名無しさん
2014/01/31(金) 00:46:27.00■ このスレッドは過去ログ倉庫に格納されています