13/10/17 22:04:40.64
ExcelのVBAに関する質問スレです
___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
前スレ
Excel VBA 質問スレ Part32
スレリンク(tech板)
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人はこちらのスレへ
スレリンク(tech板)l50
2:デフォルトの名無しさん
13/10/17 22:11:59.51
VBAはなくならなくても文法がVB.NETライクに変わってしまう可能性はあるんかな?
3:デフォルトの名無しさん
13/10/17 22:15:11.12
前スレ
01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04 スレリンク(tech板)
05 スレリンク(tech板)
06 スレリンク(tech板)
07 スレリンク(tech板)
08 スレリンク(tech板)
09 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19 スレリンク(tech板)
20 スレリンク(tech板)
21 スレリンク(tech板)
22 スレリンク(tech板)
23 スレリンク(tech板)
24 スレリンク(tech板)
25 スレリンク(tech板)
26 スレリンク(tech板)
27 スレリンク(tech板)
28 スレリンク(tech板)
29 スレリンク(tech板)
30 スレリンク(tech板)
31 スレリンク(tech板)
4:デフォルトの名無しさん
13/10/17 22:31:44.49
2007です。A1に日付、B1に「あ」、C1に「い」、D1に「お」
と入力したとして、「お」が入力された時だけA1、B1、C1、D1
の入力内容をE1,F1,G1,H1に自動入力する方法はないでしょうか?
D1に「お」が入力された時だけH1に「お」を入力するのはIFでできたんですが、
条件が合った時だけセル位置を指定して自動入力する事はできないのでしょうか?
5:デフォルトの名無しさん
13/10/17 22:32:56.01
>>2
今までの資産の問題があるから多分変わらないとは思うけど、
使えるようになってくれればいいね。
6:デフォルトの名無しさん
13/10/17 22:37:31.53
>>4
取り敢えず前スレがまだ消化されてるどころの話じゃないのでこっちで聞こうか
前スレ
Excel VBA 質問スレ Part32
スレリンク(tech板)
7:デフォルトの名無しさん
13/10/17 23:31:38.27
>>5
変わった方がいいの?
8:デフォルトの名無しさん
13/10/17 23:36:04.76
>>7
変わって欲しくない人もいっぱいいるとは思うけど、
.Netはかなり便利な機能が沢山あるからね。
9:710
13/10/18 08:04:26.31
変えるなんてとてもできないだろうから、取り敢えず C# for Application「も」サポートしてくれ...
10:デフォルトの名無しさん
13/10/19 16:27:30.16
別に無理してObject指向にせんでも
11:710
13/10/19 17:33:45.78
>>10
シートとかセルとかもオブジェクトなので、OOP の方が楽だよ。
とある案件で C++ から Excel 操作してるけど、楽だよ~。
12:デフォルトの名無しさん
13/10/19 18:45:25.93
VB.NetとC#は文法が違うだけで後は8割方一緒だけどC++はよく知らない。
確か3DSはC++、PSVITAはC#でコード書くんだっけ?
13:デフォルトの名無しさん
13/10/21 11:44:25.92
現行スレに書きましょう。
Excel VBA 質問スレ Part32
スレリンク(tech板)
14:デフォルトの名無しさん
13/10/29 18:17:55.65
まぁでもたまには上げとかないとね
15:デフォルトの名無しさん
13/11/03 18:57:18.55
URLリンク(www.buzzword.jp)
16:デフォルトの名無しさん
13/11/05 12:54:43.75
>>15
この、一見ホモ顔、実はロリコン、実体はレイプ犯みたいな顔は誰
17:デフォルトの名無しさん
13/11/05 13:39:47.08
お前だよ、お前
18:デフォルトの名無しさん
13/11/07 13:15:50.48
>>17
ありがとう、この人物の性癖広まってるんだ
いつの手配写真だろ
韓国で整形したから同じ顔が沢山いるのかな
19:デフォルトの名無しさん
13/11/19 19:18:48.76
たまには上げないと、
Dim app As New Application
app.Visible = False '無くても「ファイル名.xlsm」は表示しなかった
app.Workbooks.Open Filename:= "D:\ファイル名.xlsm"
act_sh_Name = app.ActiveSheet.Name
act_cel_Name = app.ActiveCell.Address
'act_cel_Name = app.ActiveCell.Address(True, True, xlA1, True)
'シートとセル名を一括で取得できるが利用時を考え別々に取得
app.Quit
必要最小限
20:デフォルトの名無しさん
13/11/22 13:21:37.36
誘導age
21:デフォルトの名無しさん
13/11/22 13:45:41.81
Application.LargeOperationCellThousandCount
コレってどんな時に使う?
使った事ある人いたら教えて
22:デフォルトの名無しさん
13/11/22 14:17:06.27
>>21
スレリンク(tech板:21番)
23:デフォルトの名無しさん
13/11/22 15:02:23.40
>>22
意味不明~ぃ
URL貼るなら、中身を見てからにして下さい
24:デフォルトの名無しさん
13/11/22 15:43:48.29
>>21
初めてみるプロパティだからいじってみたけど
オプションの詳細設定にある 時間がかかる操作が発生したときに警告を表示する
の数値設定するだけだな
たしかにその数値がオプションに設定されるし、その設定数以上のセル削除の操作で警告がでた
マクロでセル操作してもその警告は出ないっぽいからあんまり関係ないかも
25:デフォルトの名無しさん
13/11/22 15:45:28.15
オプション設定変えたら元の値解らんようになった
誰か>>24のオプションのデフォルト値いくらか教えてくれ
26:デフォルトの名無しさん
13/11/22 15:49:51.76
Excel 2007以降か。
俺には関係の無い話だった。
27:21
13/11/22 16:11:14.92
>>24
ありがとう、理解できました。
28:デフォルトの名無しさん
13/11/22 16:36:59.51
>>25
検証乙です。
ウチのPC (Win7 Office2010) では
MsgBox Application.LargeOperationCellThousandCount
の実行結果は"33554"だったよ
(""は便宜上書いてるだけで、実際には表示されてません)
29:デフォルトの名無しさん
13/11/22 17:52:30.30
P001:
Ans0 = Int(Rnd * 10000)
Ans1 = Mid(Ans0, 1, 1)
Ans2 = Mid(Ans0, 2, 1)
Ans3 = Mid(Ans0, 3, 1)
Ans4 = Mid(Ans0, 4, 1)
For i = 1 To 4
If Ans(i) = 0 Then 'Controls("Ans" & i)でもコンパイルエラーが出る・・・
GoTo P001:
End If
Next
30:デフォルトの名無しさん
13/11/22 18:23:29.32
>>29
Controlsはそういう使い方をするもんではない
あれはフォーム内のオブジェクトとかに使う
この場合は変数Ansを素直に配列変数で宣言すれば良いだけの話
Dim Ans(4)
とかいうふうに宣言する
配列要素の数が不定なら動的配列で宣言する
Dim Ans()
としておいて、後から必要に応じて
Redim Ans("配列要素数") とかやる
基本的に配列の大きさを変えると中身が消えるけど、
消したくないときは
Redim Preserve Ans("配列要素数") ってやる
ただし、大きくするのはこれで良いけど、
小さくするときにあふれた要素はどうやったって消えるので注意
31:デフォルトの名無しさん
13/11/22 20:24:48.16
VBAでいろんなパラメータを与えて処理するのがあるんですけど、その設定を忘れて実行しちゃったりする時があります。
んで、途中で強制的にストップさせたりするのってESCを押せば中止できるけど、エラーになってしまうじゃないですか。
エラーを起こさずに中止させる方法ってあります?
32:デフォルトの名無しさん
13/11/22 20:50:03.84
>>31
プログラムで中止するなら、一応、StopとかEndとかいう命令はあるが
普通は実行するコードが無くなったら止まるのでそんな命令書かない
プログラムの外から止めるのなら、それはプログラムにとっては異常事態なんだからエラーでてもしょうがない
つかためしたけど、エラーは出てないっぽいけどな
33:デフォルトの名無しさん
13/11/22 20:54:04.32
"ESC VBA エラー"でぐぐるとこの辺がヒットした。
Office TANAKA - Excel VBA Tips[Escキーでマクロを停止させない]
URLリンク(officetanaka.net)
VBA応用(ESCキーで処理が止まるのをコントロールする。)
URLリンク(www.asahi-net.or.jp)
ただ、どんな処理をするのか知らんけど、
コードの内容如何によっては
何のアナウンスも出さずにただ処理を止めるだけでは
宜しくない場合ってのも有りうるわけで。
そういう場合、ESCで止めるよりも
コード実行中にパラメータの不備をチェックできるように
コード自体を書いておくほうが良いんじゃねーかなと思う。
34:デフォルトの名無しさん
13/11/22 21:16:27.53
>>32,33
レスありがとです。
確かに強制的に停止させるよりは事前にパラメータの不備に対するチェックを掛けたほうが
本筋でしょうね。
紹介してくれたリンクも後で見てみます。
どもm(_ _)m
35:デフォルトの名無しさん
13/11/22 21:25:13.85
私はこんな方法で途中中止の分岐してる
DoEvents
If Sheet1.OptionButton1.Value = True Then
call 途中中止処理
End If
36:デフォルトの名無しさん
13/11/22 22:48:42.85
スレ立てた順番的にはこっちが先でしょ
>>1があっても大して変わらん。
Excel VBA 質問スレ Part32
スレリンク(tech板)
37:デフォルトの名無しさん
13/11/22 23:56:40.27
>>36
まぁPart31を見てあっちでいいと言うドMな人はあっちのスレに行けばいいんじゃないの?
コードもExcelのアプリケーションに依存しない話も禁止らしいけどね。
38:デフォルトの名無しさん
13/11/23 00:13:41.59
VBAで、Windowsの設定でバックアップしたファイルの情報を取得する方法有りませんか?
フォルダとかで右クリックしてプロパティ選択してタブで「以前のバージョン」って選択すると出てくるやつ。
そこに格納されてるファイルやフォルダの名前や更新日付が欲しいんですが、
WMIで取得しようとしたけど情報の取得方法がイマイチよく分からなくて・・・
39:デフォルトの名無しさん
13/11/23 05:57:44.14
>>37
複数スレが立ってるんだから立てた順に消化すればいい。
テンプレが無くても荒れたわけだし、大して変わらん。
40:デフォルトの名無しさん
13/11/23 06:23:37.78
>>38
ネタの質問だな。ググれば数秒で解決。
41:デフォルトの名無しさん
13/11/23 07:15:02.62
>>40
ネタなつもりは全くなくて、
ググっても分からないので聞いているんですが・・・
WMIのShadowCopyなどを使えば何となく出来る気がするんですが、
実際に名前やタイムスタンプを取得する方法を、
コード上でどう記述すればいいのか未だに分かりません。
数秒で解決出来たなら教えて頂いても宜しいでしょうか。
42:28=30=33
13/11/23 08:08:36.43
>>39
あのスレとこっちじゃタイトルが似てるだけで中身が別物だからなぁ…
Part32がほぼ同時に二つたって、
こっちよりの前スレが1000まで行って、向こうは未だ100も行ってないっていう現実が
あの糞テンプレが如何に嫌われてたかを如実に表してる。
さすがに自分の戦略ミスに気付いたのかテンプレ厨も今はおとなしくしてるけど
ほとぼりが冷めたら(たとえばこのスレが落ちるとかしたら)
また暴れだすのは間違いないよ。
それが分かってるから俺は向こうには書き込まない。
もちろん、向こうで書きたい人は勝手に書けば良いけど
テンプレ厨が暴れだしたら結局こっちに帰らざるを得ないと思うよ。
……って言うようなことを書くことを指して
「荒れてる」とか表現するんだろうけど、
こういう議論は>>36とか>>39みたいな馬鹿げた主張が無ければ
わざわざ言う必要が無いことなんだよね。
こっちとしても関わらずに済むので
スレのコンセプトが根本的に違うと言うことを理解して
テンプレ君には向こうで勝手に活動してもらえたらありがたいと思う。
43:デフォルトの名無しさん
13/11/23 08:24:31.36
>>42
避難スレかよw
44:40
13/11/23 08:26:50.63
>>41
続きはこのスレでやりましょう。
Excel VBA 質問スレ Part32
スレリンク(tech板)
45:デフォルトの名無しさん
13/11/23 09:01:59.71
>>44
そちらのスレに行ったら普通の状態のフォルダやファイルの取得方法と勘違いされている方がおられました。
その辺の方法は流石に聞くのは失礼な部類に含まれると思っています。
私が知りたかったのは>>38でも記述した「以前のバージョン」、つまりシャドウコピー内のファイルやフォルダの情報です。
向こうのスレではその後にVB6で出来る様な事はスレ違いであるとの指摘が有ったので、
引き続きこちらでお世話になりたいと思います。
46:デフォルトの名無しさん
13/11/23 09:17:57.33
>>45
アンチテンプレ厨の自演ネタ質問なので降りるわ。
47:デフォルトの名無しさん
13/11/23 09:36:55.54
降りるも何も初めから舞台に上がっていないでしょ
挙句に見当違いのFSO持ち出したりしてみっともないったらありゃしない
答えられないなら下手な言い訳せずに黙って消えればいいのに
48:デフォルトの名無しさん
13/11/23 09:43:33.38
>>45
何の為に必要なの?
49:デフォルトの名無しさん
13/11/23 09:43:54.19
>>45
何の為に必要なの?
50:デフォルトの名無しさん
13/11/23 10:32:05.39
>>49
サーバ上のフォルダやファイルの更新履歴を欲しいと思っています。
最初はサーバ上のフォルダやファイルを定期的に巡回し、その情報を取得してDBに登録する方法を考えていましたが、
膨大な数があるため、1巡するだけでも12時間以上掛かってしまいます。
それで指定されたファイルやフォルダの情報をシャドウコピー側から
取得出来ればいいなと思い聞いてみました。
51:デフォルトの名無しさん
13/11/23 10:49:48.08
>>50
自演乙
52:デフォルトの名無しさん
13/11/23 10:59:33.23
>>51
痛々し過ぎて見てられない
53:デフォルトの名無しさん
13/11/23 11:37:18.23
自演ってことにしとかないと赤っ恥かきっぱなしだもんねw
54:デフォルトの名無しさん
13/11/23 12:36:38.98
仮に自演だったとしても(まぁ自演ではない訳だけど)
トンチンカンな回答で偉そうにしていた事実は消えない
55:デフォルトの名無しさん
13/11/23 13:17:41.21
ここもスレタイみるかぎり、"Excel"のVBAスレなんだが
スレチ気にするならVBAなんでもスレいけよ
56:デフォルトの名無しさん
13/11/23 14:20:32.85
ExcelのVBAとVB6は被る所も多いからな。
そんなので一々ギャーギャー言うならあのドMスレに行け。
57:デフォルトの名無しさん
13/11/23 14:34:44.17
>>50
シャドウコピー作る例はいっぱい見つかるけど戻すのはほとんど見ないな
かろうじて見つかったのがこれ
social.technet.microsoft.com/Forums/de-DE/57025a40-400d-498d-a163-3c613145d16c/powershell?forum=powershellja
ただ、ファイルのプロパティで出るやつは、シャドウコピーじゃない普通のバックアップも表示してるしどうやってるか知らん
そもそもファイルの更新情報とるのに12時間ってホントにそんなにかかるのか?
プロパティで出てくるのだいぶ遅いし、それで一覧つくるともっとかかる気がするけど
58:デフォルトの名無しさん
13/11/23 15:41:13.67
>>57
レスありがとうございます。
シャドウコピーから取得するなら、巡回する必要もないしピンポイントで
対象のフォルダやファイルのバックアップ情報を見にいけば良いと思ったので
余り時間のことは気にしていませんでした。
そのリンク先にもWMIのShadowCopyが書いてあるのですが、
色々調べてみた結果、結局ローカルからサーバの情報を読みに行く際に
VSS登録先のIDやパスワードが必要になるのでこちらの環境上、結局は使えない
みたいです。
別にシャドウコピーを使わなくても今回は大量にある
ファイルやフォルダの履歴がピンポイントで指定して取れれば
それで良いんですが・・・。
59:デフォルトの名無しさん
13/11/23 18:20:45.18
>>58
うーん。
ファイル数が多くても履歴をなんとかする方法、
知らなくもないけど、多分テンプレ君が数秒でググって教えてくれるよ。
口だけでなければ。
60:デフォルトの名無しさん
13/11/23 19:16:49.58
>>59
テンプレ君は口だけなので当てには出来ません
是非>>59さまのお知恵をお貸しください
61:デフォルトの名無しさん
13/11/23 19:32:01.65
>>60
大丈夫。>>40であれだけの事を豪語してるし。
まさかこれで何も無しって事はないだろw
62:デフォルトの名無しさん
13/11/23 19:42:18.50
なんだよw
口だけ君がまた一人増えただけか
63:デフォルトの名無しさん
13/11/23 19:53:49.10
>>62
いや、俺はテンプレ君の出方を見るよ。
どうしても駄目でギブアップと言うなら
答えんでもないけどねw
64:デフォルトの名無しさん
13/11/23 20:04:45.04
>>63
あいつがギブアップなんてする訳無いじゃん
何事も無かったようにシカトして終わりだよ
大体、あんな屑相手にするより
今実際に困ってる>>38さんにアドバイスしてあげるほうが
よっぽどヤツにダメージ与えられるだろうが。
せめて期限を区切ってそれを過ぎたら回答すると宣言しておくとか
そのぐらいはしてもらわないと
今の時点では君も口だけ君と言わざるを得ない。
第一君の回答が正しいと言う保証も無いわけだし。
65:デフォルトの名無しさん
13/11/23 20:28:56.03
答えられないテンプレ君が必死ですw
>>60は捨てメアド晒してくれ。先に俺の
考えた方法を送っておこう。
テンプレ君が考えを述べるまで、メールでやり取りすることにしようか。
テンプレ君が考えを述べた後はここでいくらでも俺の考えを晒してくれて構わない。
それならみんな幸せだよんな。
66:60=62=64
13/11/23 21:04:56.72
いや、俺は別にどうでも良いのよ。
俺の能力では君の答えを聞いてもそれが正しいかどうか判断出来んし。
むしろ>>38さんに教えてあげてくれ。
ただ、こっちやあっちでそういう安い挑発をするより
答えられる質問にはこのスレで淡々と答え続けることの方が
あっちのスレの存在意義を失わせるという意味では遥かに有効だと思うよ。
あぁ、そういえばテンプレ君が俺を騙ってメールする可能性もあるから
君の正当性を証明する手法としてはおそらく不適切だね。
67:デフォルトの名無しさん
13/11/23 21:13:32.42
>>65
助かります。実は代替案が思い浮かばなくて非常に困っていました。
少し諦めかけて月曜日に仕事場で何て報告しようか悩んでいた所です。
それと私は>>58ですが>>60ではありません。
宜しくお願いいたします。
sutemeado123456@gmail.com
68:デフォルトの名無しさん
13/11/23 21:22:25.84
>>67
了解した。
それにしても>>60が>>58では無かったとは。
>>66がテンプレ君で成りすましだったら全て帳尻が合うな。
いけずうずうしいと言うかなんというかw
69:デフォルトの名無しさん
13/11/23 21:47:07.49
>>68
> >>66がテンプレ君で成りすましだったら全て帳尻が合うな。
会わねーよw
もし俺がテンプレ君だったら自虐的にも程があるだろ。
挙句に誘導してる向こうのスレじゃなくてこっちで答えられたら
ヤツにどんなメリットがあるんだよ。
(ちなみにこういうときに使うなら
「帳尻」じゃなくて「辻褄」のほうが適切だよ)
俺は向こうには書き込まないし、自分が分かる範囲の質問なら
こっちのスレで答えさせてもらってるだけだよ。
一応このスレで俺が今まで書き込んだレスは
>>28,>>30,>>33,>>42,>>47,>>52,>>54,>>60,>>62,>>64
だよ
これは全部俺の書き込みだし、このスレではこれ以外には一切書き込んで無い。
内容を吟味してテンプレ君かどうか判断してくれ。
つうか、仮に成りすましを疑われたところで
特にデメリットも無いわけだけどな。
70:デフォルトの名無しさん
13/11/23 22:36:41.94
>>68
メール確認しました。
まさかここまで詳しい説明書き付けてくれて、
しかも一番重要と思える部分を既に作ってくれているとは思いもしませんでした。
家ではその部分は問題なく動いているので、
仕事場の膨大なフォルダやファイルで問題なく使えるか確認させて頂きたいと思います。
私の知識が足らず、よく分からない部分は済みませんが後でメール送付しますので宜しくお願いします。
どうもありがとうございます。
71:デフォルトの名無しさん
13/11/23 22:57:52.70
>>69
そうか、信用しよう。
疑って済まんかったな。
>>70
そんな大層なもんじゃないけど、
仕事場でもちゃんと動くことを祈ってるよ。
72:デフォルトの名無しさん
13/11/24 16:07:20.41
質問です
もうすぐクリスマスですが
皆さんは一緒に過ごす相手がいますか?
73:デフォルトの名無しさん
13/11/24 21:22:14.19
うるせーハゲ
74:デフォルトの名無しさん
13/11/25 16:21:16.46
質問です
もうすぐクリスマスですが
クリスマスまでに彼女ができるVBAのコードはありますか?
75:デフォルトの名無しさん
13/11/25 21:11:46.22
ネタの質問だな。ググれば数秒で解決。
76:デフォルトの名無しさん
13/11/25 22:35:38.26
ググって解決するんだ!
77:デフォルトの名無しさん
13/11/29 11:03:07.73
>>74
MsgBox "Love"
78:デフォルトの名無しさん
13/11/29 16:52:31.96
MsgBox "クリスマスに1日一緒にいてくれたら10万円あげちゃう", vbOKOnly
79:デフォルトの名無しさん
13/11/29 21:18:14.46
インターフェースって
よく分かんないのがあるんですが
あれって何に使うんですか?
80:デフォルトの名無しさん
13/11/29 22:10:15.32
vbaのどこで「インターフェース」って出てくるのさ。
Vb.Netの方でならそういうのあるのは知ってるけど(ちらっとだけどねw
81:デフォルトの名無しさん
13/11/30 00:00:45.39
>>78
例えば、AというクラスとBというクラスがあったとして、
それぞれに同じ数と型の引数、同じ型の戻り値を持った同じ名前のメソッドがあったとします。
コード的にAとBのインスタンスさえ入れ換えてやれば分岐して違うクラスとして
設定しなくても一発で行けるのに・・・
と言う時に、A、B、どちらの型のインスタンスも格納出来るのがインターフェースです。
もっとも、それ用に作らなければなりませんが。
>>80
vbaには継承は有りませんが実装は有る様ですよん。
82:デフォルトの名無しさん
13/11/30 06:02:14.70
>>79
クリスマスの夜に僕と君を繋いでくれる
そういうものさ
83:デフォルトの名無しさん
13/11/30 13:24:33.41
早くvba.net出来ないかな。
.netになったらあんなことやこんなことも
できるようにばなるんだろうな。
いや、よく知らないけど。
84:デフォルトの名無しさん
13/12/03 11:41:37.13
プログラマーなら「FizzBuzz問題」解けるよな?
スレリンク(prog板:6番)
なんですが、forの後のコロンってどういう意味があるんでしょうか?
Sub a()
Dim s, i
For i = 1 To 100: s = s & IIf(i Mod 15 = 0, "FizzBuzz", IIf(i Mod 3 = 0, "Fizz", IIf(i Mod 5 = 0, "Buzz", i))) & vbCrLf: Next
MsgBox s
End Sub
85:デフォルトの名無しさん
13/12/03 15:21:31.23
>>84
改行しないで、1行に複数の命令書くときの区切り
86:デフォルトの名無しさん
13/12/03 15:25:14.02
>>85
なんと、ありがとうございます
セミコロンにしようよ・・・
87:デフォルトの名無しさん
13/12/03 16:21:57.89
>>86
セミコロンには別の意味が割り当てられてる
88:デフォルトの名無しさん
13/12/03 21:35:40.07
>>84
へぇ、vbaでも三項演算子って使えるんだ。
vb.net辺りでも使えるけど、iifだと遅いからifの方の三項演算子使うとか色々あるんだけど、
まぁvbaのそれとは別物かも知れんね。
89:デフォルトの名無しさん
13/12/03 21:49:58.38
三項演算子なんてたいそうなものじゃないよ
>>85のいうとおり一行に複数命令を書くときの単なる区切り文字
Cでのセミコロンと大体同じ(なので>>86はセミコロンにしようよと言ってると思う)
90:デフォルトの名無しさん
13/12/03 21:52:40.76
あコロンのことをいってるんじゃないのか勘違い失礼
91:デフォルトの名無しさん
13/12/03 22:38:33.25
VBAではIIfは関数であって演算子ではない
VB.NETでも同様
92:デフォルトの名無しさん
13/12/04 02:17:02.98
GetPivotDataを使うとき、引数が条件によって変わる場合の処理ってどうすれば良いですか。
イメージとしては下記のようにしたいです。
Sub MYGETPIVOTDATA(ParamArray arr as Variant)
GETPIVOTDATA(データ フィールド, ピボットテーブル,arr(0),arr(1),arr(2),arr(3),・・・arr(ubound(arr,1)))
End Sub
93:92
13/12/04 02:18:48.10
引数の数が条件によって増えたり減ったりするという意味です。
94:デフォルトの名無しさん
13/12/04 10:03:51.41
数分ケース
95:デフォルトの名無しさん
13/12/04 23:44:34.02
>>93
役に立つかどうかは分からんけど、この辺のでどうだろうか
URLリンク(www.moug.net)
96:デフォルトの名無しさん
13/12/05 00:06:24.65
演算子と言えばXor(排他的論理和)ってのがあって
True Xor True = False
True Xor False = True
False Xor True = True
False Xor False =False
みたいにどちらか片方のみがTrueの場合にTureを、
そうじゃない場合はFalseを返すんだけど、
これの使い道って何か有る?
97:デフォルトの名無しさん
13/12/05 03:16:55.19
なんだろうね。
加算機とか半加算器とかで使うのかね。
言われてみれば使ったことないかも。
98:デフォルトの名無しさん
13/12/05 05:31:18.09
URLリンク(code.msdn.microsoft.com)
99:デフォルトの名無しさん
13/12/05 08:05:03.83
>>96
今取り込んだデータと直前のデータの Xor とって、データの変化点を見るとか。
まあ、VBA ではあまり出番はないわな。
100:デフォルトの名無しさん
13/12/05 11:29:50.26
スクランブラ/デスクランブラを実装したり
擬似乱数を自前で作ったり
かな?
101:デフォルトの名無しさん
13/12/05 11:54:01.45
今まで、「あ、これってxor使えば一発じゃん」と思ったことが数回あったと記憶しているが、
どういう場面だったかは思い出せない
102:デフォルトの名無しさん
13/12/05 16:40:08.46
特定ビットの反転につかう
103:デフォルトの名無しさん
13/12/05 16:48:23.56
>>102
あ!それだ!
104:デフォルトの名無しさん
13/12/05 20:12:53.41
で、VBAで「特定のビットを反転する」場面って?
105:デフォルトの名無しさん
13/12/05 21:19:40.58
フラグって意味じゃないかな
106:デフォルトの名無しさん
13/12/05 22:04:39.69
>>102
特定Bitの反転だったらNotとAndでよくない?
107:デフォルトの名無しさん
13/12/05 23:46:22.83
NotとAndでビット反転書いてみてくれ
それとXorと比べてみ
108:デフォルトの名無しさん
13/12/06 00:10:00.42
ECCでも実装すれば
109:デフォルトの名無しさん
13/12/06 07:06:26.46
>>107
ああ、なるほどね。解った。
110:デフォルトの名無しさん
13/12/06 09:15:16.89
SQL で XOR が無くて困ったときってどうしてます?
111:デフォルトの名無しさん
13/12/06 13:29:52.61
IE操作時、BusyとReadystateでページ読み込み完了をチェックしていますが、
タイムアウト(?)が原因なのか ページの読み込み中 で止まる場合があります
このような場合、どのように回避すればよろしいのでしょうか?
112:デフォルトの名無しさん
13/12/06 17:32:08.44
>>111
一定時間経過したら、再読み込み処理、
複数回再読み込みしてダメなら、読み込みエラー処理
113:デフォルトの名無しさん
13/12/06 22:03:11.45
>>112
無事動きました、ありがとうございます
114:デフォルトの名無しさん
13/12/07 08:48:57.29
仕事場でまれに内容が何も書いてない関数が
ずらっと並んでいるクラスモジュールを見かけることがあるんですが
この間気になってそことその関数を呼び出している所を
コメントアウトしたら挙動がなんかおかしくなりました。
この内容がまったく書かれていない関数ってどんな意味があるんでしょうか?
115:桃白白 ◆9Jro6YFwm650
13/12/07 10:02:34.86
>>114
なにもしないってことじゃない。ヌルオブジェクトみたいな。
116:デフォルトの名無しさん
13/12/07 13:00:27.72
呼び出してる前後で想像できないのかよ
想像しろよ、気になるだろ、なんなら聞いてくれよ
ずらっと並ぶ程沢山あるならなおさら
117:デフォルトの名無しさん
13/12/07 14:03:31.00
>>114
コード見てないから分からんけど、
それ、多分ちょっと前にレスがあった
インターフェースだと思うよ。
118:デフォルトの名無しさん
13/12/07 21:05:07.86
IIFってなんて詠むんでしょうか
アイアイエフ?
アイイフ?
2エフ?
119:デフォルトの名無しさん
13/12/07 22:14:16.32
>>118
俺はアイイフと読んでいるけど、多分これには正しい答えはなく、
どれだけ多く世間に浸透しているかが正しいかどうかを決めていると思う。
そんな時はここを参考にするといいかも知れない。
URLリンク(shinh.skr.jp)
120:デフォルトの名無しさん
13/12/07 22:26:52.30
愛畏怖って読んでます
121:デフォルトの名無しさん
13/12/07 23:34:34.88
>>119
いやおかしいだろそのリンク先w
122:デフォルトの名無しさん
13/12/08 00:33:08.88
>>114
>>117
インターフェースだね。
って言うか前スレで、テーブルの集計を出して欲しいって言われた時
実はそれ使ってコード書いたし。長くなるけど、その時のコードで
説明しようか。
123:デフォルトの名無しさん
13/12/08 00:37:17.54
標準モジュール部
モジュール:Main
Option Explicit
Private mSheetParameterEntity As ISheetParameterEntity
'メイン処理
Public Sub Main(ByVal targetSheet As Worksheet)
Dim factory As New sheetParameterFactory
On Error GoTo Error_Handler
Application.ScreenUpdating = False
Set mSheetParameterEntity = factory.makeSheetParameter(targetSheet)
Call Initialize
Call TableControl.CopyTable
Call SheetControl.Sort
Call TableControl.ReleaseTable
Call SheetControl.MakeSummary
Call SheetControl.SelectCellTopLeft
GoTo Finaly
124:デフォルトの名無しさん
13/12/08 00:38:33.25
Error_Handler:
Call MsgBox(Error)
Finaly:
Application.ScreenUpdating = True
End Sub
'初期化処理
Private Sub Initialize()
Call TableControl.SetSheetParameterEntity(mSheetParameterEntity)
Call SheetControl.SetSheetParameterEntity(mSheetParameterEntity)
Call TableControl.ClearOutLine
Call SheetControl.InitializeSheet
End Sub
125:デフォルトの名無しさん
13/12/08 00:42:50.80
モジュール:SheetControl
Option Explicit
Private Const COPY_CRITERIA_POSITION As String = "B2"
Private mSheetParameterEntity As ISheetParameterEntity
'テーブルパラメタエンティティ格納
Public Sub SetSheetParameterEntity(ByVal value As ISheetParameterEntity)
Set mSheetParameterEntity = value
End Sub
'シート初期化
Public Sub InitializeSheet()
mSheetParameterEntity.GetTargetSheet.Cells.Clear
End Sub
'ソート処理
Public Sub Sort()
Dim sortRange As range
'ソートキーのクリア
mSheetParameterEntity.GetTargetSheet.Sort.SortFields.Clear
'ソートキー追加
For Each sortRange In mSheetParameterEntity.GetTargetSortItem
mSheetParameterEntity.GetTargetSheet.Sort.SortFields.Add Key:=sortRange, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Next
126:デフォルトの名無しさん
13/12/08 00:44:08.11
'ソート
With mSheetParameterEntity.GetTargetSheet.Sort
.SetRange mSheetParameterEntity.GetTargetRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
'集計行の表示
Public Sub MakeSummary()
mSheetParameterEntity.GetTargetRange.Subtotal _
GroupBy:=mSheetParameterEntity.GetGroupColumn, _
Function:=xlSum, _
TotalList:=Array(mSheetParameterEntity.GetTargetSummaryItem), _
Replace:=True, _
PageBreaks:=False, _
SummaryBelowData:=True
End Sub
127:デフォルトの名無しさん
13/12/08 00:45:26.07
'対象の範囲と指定した列により、ソートする列の行範囲を取得
Public Function GetSortRange(ByVal targertSheet As Worksheet, _
ByVal originalRange As range, _
ByVal columnOffset As Long) As range
Set GetSortRange = targertSheet.range(Cells(originalRange.Row, _
originalRange.Column + columnOffset), _
Cells(originalRange.Row + originalRange.Rows.Count - 1, _
originalRange.Column + columnOffset))
End Function
'対象シートの左上セル選択
Public Sub SelectCellTopLeft()
mSheetParameterEntity.GetTargetSheet.Cells(1, 1).Select
End Sub
128:デフォルトの名無しさん
13/12/08 00:47:52.99
モジュール:TableControl
Option Explicit
Private Const COPY_CRITERIA_POSITION As String = "B2"
Private mSheetParameterEntity As ISheetParameterEntity
'テーブルパラメタエンティティ格納
Public Sub SetSheetParameterEntity(ByVal value As ISheetParameterEntity)
Set mSheetParameterEntity = value
End Sub
'テーブルコピー処理
Public Sub CopyTable()
Sheet1.range(COPY_CRITERIA_POSITION).CurrentRegion.Copy
mSheetParameterEntity.GetTargetSheet.range(COPY_CRITERIA_POSITION).PasteSpecial
Application.CutCopyMode = False
'テーブル範囲格納
Call mSheetParameterEntity.SetTargetRange( _
mSheetParameterEntity.GetTargetSheet.range(COPY_CRITERIA_POSITION).CurrentRegion)
End Sub
'アウトラインの解除
Public Sub ClearOutLine()
mSheetParameterEntity.GetTargetSheet.Cells.ClearOutLine
End Sub
129:デフォルトの名無しさん
13/12/08 00:49:12.40
'テーブル解除処理
Public Sub ReleaseTable()
Dim list As ListObject
With mSheetParameterEntity
For Each list In .GetTargetSheet.ListObjects
If list.range.Row = .GetTargetRange.Row And _
list.range.Column = .GetTargetRange.Row And _
list.range.Rows.Count = .GetTargetRange.Rows.Count And _
list.range.Columns.Count = .GetTargetRange.Columns.Count Then
list.Unlist
Exit For
End If
Next
End With
End Sub
130:デフォルトの名無しさん
13/12/08 00:58:17.49
クラスモジュール部
モジュール:ISheetParameterEntity
'対象シート取得
Public Function GetTargetSheet() As Worksheet
End Function
'対象範囲取得
Public Function GetTargetRange() As range
End Function
'対象範囲格納
Public Sub SetTargetRange(ByVal value As range)
End Sub
'対象ソート項目取得
Public Function GetTargetSortItem() As Collection
End Function
'グループ化列取得
Public Function GetGroupColumn() As Integer
End Function
'対象合計項目取得
Public Function GetTargetSummaryItem() As Integer
End Function
131:デフォルトの名無しさん
13/12/08 01:00:28.87
モジュール:Sheet2ParameterEntity
Option Explicit
Implements ISheetParameterEntity
Dim mTargetRange As range
Const SORT_ITEM1 As Long = 0
Const SORT_ITEM2 As Long = 1
Const GROUP_COLUMN As Integer = 2
Const SUMMARY_ITEM As Integer = 3
'対象シート取得
Public Function ISheetParameterEntity_GetTargetSheet() As Worksheet
Set ISheetParameterEntity_GetTargetSheet = Sheet2
End Function
'対象範囲取得
Public Function ISheetParameterEntity_GetTargetRange() As range
Set ISheetParameterEntity_GetTargetRange = mTargetRange
End Function
'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub
132:デフォルトの名無しさん
13/12/08 01:01:16.16
'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet2, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet2, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function
'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function
'対象合計項目取得
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
133:デフォルトの名無しさん
13/12/08 01:03:07.08
モジュール:Sheet3ParameterEntity
Option Explicit
Implements ISheetParameterEntity
Dim mTargetRange As range
Const SORT_ITEM1 As Long = 3
Const SORT_ITEM2 As Long = 0
Const GROUP_COLUMN As Integer = 4
Const SUMMARY_ITEM As Integer = 3
'対象シート取得
Public Function ISheetParameterEntity_GetTargetSheet() As Worksheet
Set ISheetParameterEntity_GetTargetSheet = Sheet3
End Function
'対象範囲取得
Public Function ISheetParameterEntity_GetTargetRange() As range
Set ISheetParameterEntity_GetTargetRange = mTargetRange
End Function
'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub
134:デフォルトの名無しさん
13/12/08 01:03:56.94
'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function
'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function
'対象合計項目
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
135:デフォルトの名無しさん
13/12/08 01:06:09.64
モジュール:SheetParameterFactory
'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub
'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function
'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function
'対象合計項目
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
136:デフォルトの名無しさん
13/12/08 01:15:14.00
ミスった>>135はなし
モジュール:SheetParameterFactory
'シートパラメタエンティティ作成クラス
Public Function makeSheetParameter(ByVal targetSheet As Worksheet) As ISheetParameterEntity
Dim instance As ISheetParameterEntity
Select Case targetSheet.Name
Case Sheet2.Name
Dim sht2Para As Sheet2ParameterEntity
Set sht2Para = New Sheet2ParameterEntity
Set instance = sht2Para
Case Sheet3.Name
Dim sht3Para As Sheet3ParameterEntity
Set sht3Para = New Sheet3ParameterEntity
Set instance = sht3Para
Case Else
Set instance = Nothing
End Select
Set makeSheetParameter = instance
End Function
137:デフォルトの名無しさん
13/12/08 01:36:17.38
ちょっと長くなって荒らしみたいになって済みません。
が、>>130の部分がインターフェースで
、
>>123でそのインターフェースの型を用意して、>>136でSheet2ParameterEntityか、Sheet3ParameterEntityの
どちらかを生成して>>123で用意した型に設定しています。
後は生成される二つのクラスの中以外は差異なくコードが走るため、
クラスの違いによる分岐は有りません。
この様に違うクラスで生成したものを同じクラスの型で扱えるようにする
仕組みが、中に何も書かれていない関数の正体です。
138:デフォルトの名無しさん
13/12/08 01:39:18.23
うわぁ、読み返してみると長すぎだ。
ごめんなさいもう二度としません。
139:デフォルトの名無しさん
13/12/08 07:58:29.03
>>119
へー、面白いな、これ。
「Width」って「うぃどぅす」って呼ぶのが一般的なんだ。
今までずーっと「ワイズ」だと思ってた。
140:デフォルトの名無しさん
13/12/08 08:27:53.85
>>138
「Vba、インターフェース、ストラテジーパターン」あたりで
ググれと言えば一発で分かることだろ。
どうしても長いコード書きたかったら前
桃臼が晒してたコード書き場があったから
そこを使え。
どこだったかは忘れたけど。
141:デフォルトの名無しさん
13/12/08 09:52:33.48
フランス語ではいは?
京都人「うぃどす」
142:デフォルトの名無しさん
13/12/08 10:19:44.06
茨城が
いばらきと
いばらぎで僅差なんだね。
本当はどっち?
143:デフォルトの名無しさん
13/12/08 11:10:35.20
本当は
ちばらき
144:デフォルトの名無しさん
13/12/08 11:30:50.96
Then は ゼンって言ってます
なぜか合ってるのか不安になる音です
145:デフォルトの名無しさん
13/12/08 12:26:13.53
日本語に無い音だから、カナ表記するなら近い音を探すしかない
146:デフォルトの名無しさん
13/12/08 12:42:17.43
そこでGoogle翻訳読み上げお姉さんですよ
キュートなお声ですよね
147:デフォルトの名無しさん
13/12/08 15:06:03.17
いやだからおかしいだろそこのリンク先
最初のAAAからして読み方の
西恋ケ窪とかどこだよ。
IEnumerableって何なんだよ。
148:デフォルトの名無しさん
13/12/08 15:34:26.83
IEnumerableはインターフェースだにょ
149:デフォルトの名無しさん
13/12/08 18:05:50.91
私は関数で使う変数宣言を関数の頭で行いますが、
Javaもやっている私の同僚はインデント階層切替わりの単位で変数宣言をします。
関数内のどこで変数宣言しても特に動きが変わらないのは知っていますが、
同僚に言わせるとその方が分かり易いし、いずれObject指向言語に手を付けるなら、
そっちの方に慣れておいた方がいいと言います。
そう言うものなんでしょうか?
150:デフォルトの名無しさん
13/12/08 19:32:44.84
>>149
>関数内のどこで変数宣言しても特に動きが変わらない
VBAではそうでも、Javaではそうではない
言語に合わせて宣言するべきで、VBAではプロシジャの先頭での宣言が薦められてたはず
まあ、どこで宣言しても良いんだが、ルールを決めてそれを守る方が大事
先頭で宣言したり使う直前に宣言したり、混在させるのが最悪
151:デフォルトの名無しさん
13/12/08 20:55:04.75
>>149
vbaはやっぱり頭で合わせるもんだと思う。
無理してjavaなんぞに合わせなくても
object指向ので作る時にそうすればいいじゃない。
152:デフォルトの名無しさん
13/12/08 21:01:29.51
>>148
冗談で言ってるのかと思ったら
本当でビビったw
153:デフォルトの名無しさん
13/12/08 21:07:26.86
変数の話ならそんなことより
DimとPrivateの違いって何なの?
154:デフォルトの名無しさん
13/12/08 21:37:29.33
>>153
モジュールレベルで宣言したときのスコープ(参照できる範囲)が違う
と思ったけど、モジュールレベルで使うとDimと同じスコープか
プロシジャレベルで使えるかどうかの違いだけで同じだな
VBではPublicかPrivate書いたらDimを省略できる出来るだけだったと記憶してるが
VBAではそうじゃないっぽいな
155:デフォルトの名無しさん
13/12/09 20:52:31.18
>>153
Dimは遠い昔の、それこそVBじゃない頃、
N-Basicとかで配列をDim(dimension)で
宣言してた頃の名残りで盲腸みたいなもんだから、
出来ればPrivateで宣言した方がいいと、個人的には思う。
コメントをアポストロフィで付けないで、REMで書く様なもん。
156:デフォルトの名無しさん
13/12/10 01:13:10.32
シングルコートまたはシングルコーテーションと言わずにアポストロフィとおっしゃるのは癖ですか?何か意図があれば解説きぼんぬ
157:デフォルトの名無しさん
13/12/10 01:51:33.24
それを言うなら自分もまず「シングルクォート」と書くべきじゃね
158:デフォルトの名無しさん
13/12/10 02:05:44.25
>>156
引用符(コーテーションマーク、クォーテーションマーク)は、前と後の一対で使うもの
159:デフォルトの名無しさん
13/12/10 02:09:15.25
シングルコーテーションマークは、英語で使われ、
日本語ではあまり使われない
(中国語や韓国語では普通に使われるらしい)
160:デフォルトの名無しさん
13/12/10 02:38:21.76
シングルクォーテーションとアポストロフィは厳密には別物なんだろうけど
もともともコメント記号としてどっちの意図で使われたのかはわからんしなぁ
俺もこの文脈なら'はアポストロフィって言うんだが、ヘルプみると
>コメントを入力するには、先頭にクォーテーション (') を入力するか、Rem ステートメントで指定します。
とか
>コメント行は、先頭にクォーテーション (') または Rem ステートメントのいずれかと、
とか書いてあるから、あれはクォーテーションと呼ぶのが正しいのかもしれん
161:デフォルトの名無しさん
13/12/10 03:14:25.20
記号の読み方はJIS規格で「シングルクォーテーションマーク」と定められているので議論の余地はない
英語的な解釈をするなら、アポストロフィはコメント行の先頭に使っていい記号ではない
本来はクォーテーションで前後を囲ったであろう物を、8bit時代のMS-BASICのリソース的な制約から
後半を省略可能にしたと見るのが妥当
162:デフォルトの名無しさん
13/12/10 04:19:23.00
そういうのも定められてるのか。
そのJIS企画の当該ページのリンクが貼られたらこの話は終わりにしよう。
それまでは存分に語らい合いましょう!
ってExcel VBAスレじゃないですか。
おわり。
163:デフォルトの名無しさん
13/12/10 04:33:44.43
>>161
お前のキーボードはjIS規格配列なのか?
VBAはいつからJIS規格になったんだ
違う規格の定義をあてはめて議論の余地がないとか笑わせる
164:デフォルトの名無しさん
13/12/10 04:42:38.53
おーっとここで待ったが入ったーっ!
これは確かにと言わざるを得ない。
これで結論はもう出たということか。
VBAのオフィシャルドキュメントで、
コメントには何を使うと記載されているのか?
で、この話に執着する者達が終着できそうだ。
公式文書のリンクが貼られたらこの話は終わりにしよう。
それまでは存分に語らい合いましょう!
って略
165:桃白白 ◆9Jro6YFwm650
13/12/10 05:26:36.90
>>164
語らうには語り合うという意味があるから合うを付ける必要ないんじゃないかな。
語らいましょう、または、語り合いましょうでいいと思うんだよね。
166:デフォルトの名無しさん
13/12/10 05:33:56.97
>>165
うっせーばーか
いいと思うんだよねってなんだよ
いいんだよって言い切れないのかよ
もっと自信もてよボケカス
早くVBAの公式文書のリンク持ってこいや
167:桃白白 ◆9Jro6YFwm650
13/12/10 05:38:24.57
(´・ω・`)・ω・`) キャー
/ つ⊂ \ 怖いー
168:デフォルトの名無しさん
13/12/10 05:57:51.45
\ ¦ /
\ ¦ /
/ ̄ ̄ ヽ,
/ ', / _/\/\/\/|_
\ ノ//, {0} /¨`ヽ {0} ,ミヽ / \ /
\ / く l ヽ._.ノ ', ゝ \ < バーカ! >
/ /⌒ リ `ー'′ ' ⌒\ \ / \
(  ̄ ̄⌒ ⌒ ̄ _)  ̄|/\/\/\/ ̄
` ̄ ̄`ヽ /´ ̄
| |
--- ‐ ノ |
/ ノ ----
/ ∠_
-- | f\ ノ  ̄`丶.
| | ヽ__ノー─-- 、_ ) - _
. | | / /
| | ,' /
/ / ノ | ,' \
/ / | / \
/_ノ / ,ノ 〈 \
( 〈 ヽ.__ \ \
ヽ._> \__)
169:デフォルトの名無しさん
13/12/10 19:53:40.33
まぁいいじゃないか。
「'」に変わりはないんだろうし。
170:デフォルトの名無しさん
13/12/13 00:23:21.08
Excelにはテキストリーダー の機能があると聞きました。
それに音程付けてボーカロイドみたいにすることってできますか?
171:デフォルトの名無しさん
13/12/13 05:55:28.56
無理
172:デフォルトの名無しさん
13/12/15 07:52:32.98
>>170
可能
173:デフォルトの名無しさん
13/12/15 20:26:43.18
マクロの設定を有効にしているにもかかわらず多変量解析を行おうとすると
マクロが使用できないか、全てのマクロが無能になっている可能性があります、と出ます
どうすれば多変量解析を実行できるでしょうか?
174:デフォルトの名無しさん
13/12/15 20:39:43.00
excelのバージョンも書かず、どこに置いてあるものなのかも言わず
excel2007以降なら信頼できる場所に置いてあるのかいないのかなどなど情報を一切書かず
175:デフォルトの名無しさん
13/12/15 20:45:23.66
>>173
他のブックのVBAでも同じ状態?
ググって見つかった下記などは試してみたのかな
URLリンク(answers.microsoft.com)
176:デフォルトの名無しさん
13/12/17 22:47:10.17
よくわかりませんが同じようなスレがここにもありましたので
同じ質問になると思いますが
日付で今日より1年前のデータで、最古のデータ行を拾いたいのです
WorksheetFunction.Matchで照合の型を-1で、降順に並び替えれば
うまくいきますが、データは昇順の状態で
一年前の最古のデータ行を拾う方法ありますか?
昇順のままで照合の型を-1だと当然失敗します
(最新のデータを拾ってしまいます)
いろいろ調べたのですが、いい方法がみつかりませんでした
どなたかいい方法ありませんか?
177:デフォルトの名無しさん
13/12/17 23:20:52.18
>>176
マルチ
どちらかを質問終了するべし
178:176
13/12/19 01:49:09.75
自己解決できました
179:デフォルトの名無しさん
13/12/19 18:30:09.13
同じフォルダ内にある複数のtextの記述(数字が縦に6行)を読み込むマクロを
作りたいのですが、
たとえば1つ目のtextの1行目をA-1に 2行目の記述をB-1に …
と6行を6列のに読み込み、さらにファイル名(文字列)を7列目のG-1に読み込み、
2つ目のtextの1行目をA-2に、2行目の記述をB-2に …
と読み込ませることはできませんでしょうか?
180:デフォルトの名無しさん
13/12/19 19:30:34.70
できます
181:デフォルトの名無しさん
13/12/19 19:40:28.24
できましたら、その方法を教えて頂けませんでしょうか?
182:デフォルトの名無しさん
13/12/19 19:52:46.93
まだできていませんので教えることはできません
183:デフォルトの名無しさん
13/12/19 21:54:28.52
>>179
とりあえず書いてみたけど、やっつけなのでエラー処理とかは書いてません
以下のマクロを書いたブックと同じフォルダに"text"フォルダを作って
その中に読み込ませたいテキストファイルを入れてください。
マクロを実行すると、マクロと同じフォルダに"test.xlsx"というファイルが作成されます。
既に"test.xlsx"が存在する場合、上書きするか聞いてきます。
"text"フォルダ内には不要なファイルは入れないでください。
Option Explicit
Sub test()
Dim f As Object
Dim w As Workbook
Dim t As Workbook
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set w = Workbooks.Add
With w.Sheets(1)
For Each f In fso.GetFolder(ThisWorkbook.Path & "\text").Files
Set t = Workbooks.Open(f)
t.Sheets(1).UsedRange.Copy
If .Cells(1, 1) = "" Then
.Cells(1, 1).PasteSpecial Transpose:=True
Else
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Transpose:=True
End If
t.Close
Next f
End With
w.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\test.xlsx"
End Sub
184:183
13/12/19 22:08:35.18
やべ、各テキストファイルのファイルネームを入れるっての忘れてた…orz
185:183
13/12/19 22:22:52.58
修正も超やっつけですが、コード中の
t.Close
の行の前に
.Cells(.Rows.Count, 1).End(xlUp).End(xlToRight).Offset(, 1) = t.Name
ってのを一行入れてください。
186:デフォルトの名無しさん
13/12/20 09:18:25.34
ありがとう!
あなたは救世主です!
本当にたすかりました。
187:デフォルトの名無しさん
13/12/20 16:20:17.72
大学生でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
188:デフォルトの名無しさん
13/12/20 18:55:18.13
>>187
スレリンク(tech板:236番)
189:デフォルトの名無しさん
13/12/20 22:31:06.75
ここ最近、毎日のようにマルチが現れるな
190:デフォルトの名無しさん
13/12/21 23:30:15.40
>>189
スレ立て自体がマルチなんだからしゃーない
191:デフォルトの名無しさん
13/12/22 06:22:28.69
ここ最近、毎日のようにマルチマルチってうるせえ馬鹿が現れるな
192:デフォルトの名無しさん
13/12/30 19:22:49.48
本年大変お世話になりました
来年もお力をお借りするかもしれませんが宜しくお願いいたします
机周りの掃除が終りましたので帰ります
皆様良いお年を!@22歳OL
193:デフォルトの名無しさん
13/12/31 00:00:44.71
たまにはこのスレに遊びにきてね
194:デフォルトの名無しさん
14/01/01 11:34:15.70
あけおめ~~~~~~
195:デフォルトの名無しさん
14/01/03 13:54:51.99
ことよろ
196:デフォルトの名無しさん
14/01/03 22:44:38.74
さくおせ
197:デフォルトの名無しさん
14/01/04 02:37:30.74
なあ、桃白白
ピラフ知らない?
198:デフォルトの名無しさん
14/01/04 05:04:21.87
あけましておめでとう
23歳OL
199:デフォルトの名無しさん
14/01/14 15:36:02.26
何をどこで質問したらいいかもわからないからスレ違いなら許して。
適当に1~100までとか1~20までとかの数字から無作為に実数の数字を抽出
するのはどうしたらいいのでしょうか。
200:デフォルトの名無しさん
14/01/14 16:31:22.93
>>199
VBA 乱数 とかでググるといいと思うよ
201:デフォルトの名無しさん
14/01/14 18:59:00.73
>>199
Rnd でどう?
202:デフォルトの名無しさん
14/01/16 02:21:35.14
>>199
らんだまいずもわすれずにね
203:デフォルトの名無しさん
14/01/17 15:26:54.71
放置プレイ
204:デフォルトの名無しさん
14/01/19 02:44:28.45
エクセルは2000、VBAは6.0です。
同じファイルにある他のマクロはちゃんと起動するのですが、
同じファイルにある、とあるマクロを実行しようと
ユーザーフォームの実行(▲を右90度傾けたボタン)を押しても
うんともすんともいいません。
エラーも出ません。
何が原因だと思いますか?
205:デフォルトの名無しさん
14/01/19 03:11:26.69
>>204
一瞬で計算が終わって、動いてるのに気付いてないだけの可能性
206:デフォルトの名無しさん
14/01/19 09:29:19.72
>>204
具体的なコードを貼らないと、なんとも言えん。
具体的なコードを晒すのが嫌なら、自力でなんとかするか諦めよう。
というか、コード全部は晒さないにしても、ステップ実行とかして
どの関数やステートメントで想定外の動作が起きてるか調べて
もうちょっと詳しい状況書けば、憶測も少しは煮詰まるかもだけどな。
そもそもデバッグ出来ないってのはVBA使えないのと同義だからね。
不都合が起こったところでお手上げでいいなら、コード書くだけは
パソコンで文字入力できる全ての人に可能な行為だからな。
207:204
14/01/19 19:45:55.40
>>205
すみません。正解です。
最初のfornextの、終了回の変数名の打ち間違いで、
どうやら0回ループになっていたようです。
>>206
すみませんでした。
208:デフォルトの名無しさん
14/01/19 22:34:06.31
格言
「プログラムは決して思った通りには動かない。書いた通りに動くだけだ。」
209:デフォルトの名無しさん
14/01/21 10:55:48.33
いいね♪(FB風に
210:デフォルトの名無しさん
14/01/23 04:13:29.39
サブフォルダを含むpdfファイルから画像サイズだけ抜き出してセルに表示したいのですが
この場合どのようにPDFファイルのmediaboxを参照すれば良いか教えてください。
211:デフォルトの名無しさん
14/01/23 04:17:34.57
win7 excel2010です
212:デフォルトの名無しさん
14/01/23 19:06:40.97
どういうこと?
213:デフォルトの名無しさん
14/01/23 20:00:12.85
どういうpdfなんだか差し支えない範囲で見せて欲しい w
214:デフォルトの名無しさん
14/01/23 21:15:12.64
というか、Excel関係ないやんw
なんて言うと、例のキチガイがまたうるさそうだけど
215:デフォルトの名無しさん
14/01/23 21:32:49.29
>>210
「VBA pdf」でググれば情報が見つかる
216:デフォルトの名無しさん
14/01/25 18:18:15.20
Excel 2007での質問です。
(1)特定の文字列を持つセルを詮索する。
(2)(1)で検索したセルの2セル下までの行から、特定の文字列を持つセルを検索する。
(※2セルは結合されているセルがある)
ということをしたいです。
(1)で取得したセルの行や列番号を+するなりして、Findかけてやれば(2)はいいのかなぁ、と思い、
Range(Cells(......),Cells(......)).Find()~とかやっているのですが、うまくいきません。
どう指定して検索をかけてやればでしょうか?
217:デフォルトの名無しさん
14/01/25 18:23:51.19
>>216
Resize使えよとは思うが、それでもできなくはないと思うが
動かんっていうコード張れ
218:デフォルトの名無しさん
14/01/25 18:34:03.11
つーか、計算とかVBAでの操作とか行うシートで
セルの結合は使うなよ
Excelは表計算だけではなくワープロ的な機能も多くて
自由度が高いけど、その自由度の高さで不適切なデータの作り方をして
不適切なデータ形式によって自分の首を絞めるバカが多すぎる
219:デフォルトの名無しさん
14/01/25 18:47:48.99
>>217
素早い反応ありがとうございます。
こんな感じです。
Dim cell_a As Range
Dim cell_b As Range
Set cell_a = Worksheets("Sheet1").Range("B:B").Find(What:="target1")
Set cell_b = Worksheets("Sheet1").Range(Cells(cell_a.Row + 1, 1), Cells(cell_a.Row + 2, 1)).EntireRow.Find(What:="target2")
セルの結合に関しては、そういう風なフォーマットになっているものからデータ取り出せ、って言うことなので、自分にはどうしようもないです……
220:デフォルトの名無しさん
14/01/25 19:33:28.55
>>219
どうしようもないってことはないはずだけどね
会社とかでも、改善の提案提言はできるんだからさ
単にそれをしないで、頭を使わずサルのように与えられたモノをそのまま使うことに慣れきっちゃってるだけで
そんで、本題はおそらく
Set cell_b = Worksheets("Sheet1").Range(Cells(cell_a.Row + 1, 1), Cells(cell_a.Row + 2, 1)).EntireRow.Find(What:="target2")
↓
Set cell_b = cell_a.MergeArea.Cells(1).EntireRow.Offset(1).Resize(2).Find(What:="target2")
ってことじゃないかな?
シート見てないから憶測でしかコード書けないけど、これでダメだってならシートうpね
漏らしちゃまずいデータは、"target1"みたいに適当な語句に置き換えていいからさ
221:デフォルトの名無しさん
14/01/25 20:06:06.50
>>220
うぉぉぉ……
無事に動きました
どうもありがとうございます
フォーマットについては掛け合って見ます
222:デフォルトの名無しさん
14/01/25 22:39:14.10
Excel2013での質問です。
Do While 特定のセル.Value <> ""
で特定のセルが空白だったら終了する、という処理をしようとしています。
この特定のセルが使用中とは別シートのセルだった時の記述を教えて下さい。
データを転記&計算してデータ用のシートの中身がこれ以上ない場合に止める、ということをやりたいのですが
223:デフォルトの名無しさん
14/01/25 22:53:52.87
>>222
Do While 別のシート.特定のセル.Value <> ""
224:デフォルトの名無しさん
14/01/25 22:58:19.12
>>219,220
Set cell_b = cell_a.EntireRow.Offset(1).Resize(2).Find(What:="target2")
じゃないのか
というか>>219のコードでも動いてるっぽいけど
target1が(横方向の)結合セルの場合もあるのか?
だったら>>220のコードでもダメだと思うが
225:デフォルトの名無しさん
14/01/25 23:12:51.30
>>223
素早いご回答ありがとうございます。
更にご質問いたしますが、特定のセル(別シート)をアクティブセルと同一座標から選びたいという時はどうすればいいでしょうか
処理を繰り返した時のアクティブセルがたまたま成績表シートC3なら、
にちゃん太郎シートC3(たまたま決まった座標)が空白の時に処理を止めるという具合です
相対参照を使うのかな?とは思うのですが……
226:デフォルトの名無しさん
14/01/25 23:59:30.44
どういう設計になってんだかサパーリワカンネ
227:デフォルトの名無しさん
14/01/26 00:19:28.82
すみません、わかりにくかったですね
データシートの設計
名前 性別 国語 算数 理科 社会
愛 女 80 60 75 90
誠
228:222
14/01/26 00:28:45.75
途中送信してもうたorz
データシートの状態
出席番号 名前 性別 国語 算数 理科 社会
1 愛 女 80 60 75 90
2 誠 男 50 72 68 85
(以下何人も続くと思って下さい)
表示用シートは
出席番号 名前 性別 国語 算数 理科 社会 合計点 平均点
1
だけ入力してある状態で、
名前をデータ用から引っ張る→性別を(中略)→平均点を出す→次の行に移る→上の数字に1足した数字を入力→以下繰り返し
上記の操作を生徒のデータを全員分入力できたら(名前が空白セルになったら)終わりたいわけです
わかるでしょうか?
Do Whileさえうまく行けば入力自体はうまくいくことは確認済みです。
なお、上記のはやりたいことを単純化して一例で出したので、コピペしろとかそういうのはなしにしてくださいw
229:デフォルトの名無しさん
14/01/26 00:38:45.97
>>225
別のシート.Cells(特定のセル.Row(), 特定のセル.Column()).Value
230:デフォルトの名無しさん
14/01/26 00:39:26.01
別のシート.Cells(ActiveCell.Row(), ActiveCell.Column()).Value
231:デフォルトの名無しさん
14/01/26 00:41:39.97
目的が平均と合計を出したいだけ
であればワークシート関数=average(,) =sum()
で
データシートの右端に加えればいいじゃない
表示用の見た目に書式を変えればいいじゃない
232:222
14/01/26 01:22:05.92
>>229-230
ありがとうございます!無事動作いたしました!
>>231
上記のは一例で、目的が他に色々あるし……w
233:デフォルトの名無しさん
14/01/26 05:40:30.51
>>224
君にはまだ早いみたいだから無理するな
234:デフォルトの名無しさん
14/01/27 20:41:31.77
今エクセルで作業をしてて、行き詰ってしまったんで助力お願いします
フォルダ内にある.CSVファイルの行数を一つずつ取得して、それを別のブック(開いていない)のC10とC12のセルに結果を貼り付けて
そのブックを新しい名前で特定のフォルダ内に保存したいです(保存ファイル名は行数を取得したファイルの名前&_assにしたい)
それをフォルダ内にある.csvファイル全てに連続して処理をさせたいのですが、さすがに3000ファイルもあるとこれをしないと詰みそうです
途中までの作業はぐぐって何とかやってきましたが、ちょっとどんづまってます
よろしくお願いします
235:デフォルトの名無しさん
14/01/27 21:20:37.26
>>234
Excelマクロ4.0を使えばブックは開かなくても済むかもね。
あと、CSVの行数取得はここに載ってた。
URLリンク(www.moug.net)
236:デフォルトの名無しさん
14/01/27 21:20:39.30
Office TANAKAさんのページだけで完成させられるじゃないか
ここで質問するような形式のレスではないし、論外だと思います
237:デフォルトの名無しさん
14/01/27 22:17:46.82
i = 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)
Do Until kannsuu1 <> kannsuu2
i = i + 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)
Loop
上記のようであれば完走するのですが i = i + 1 の下2行を削除すると動かなくなってしまいます
マクロの動きとしては Do Until でkannsuu1,2を呼び出すだけではダメで、必要であるごとにkannsuu1 =
などと一度呼びだしてiの値を反映させなければいけないのでしょうか?
多分ものすごく馬鹿なことを聞いてるのだと思いますが、さしつかえなければヒントだけでもご教示ください
238:デフォルトの名無しさん
14/01/27 23:07:45.25
>>237
そのプログラムが正しいとすると、kannsuu1もkannsuu2も関数じゃなくて変数
名前をkannsuuにしても関数にはならない
239:デフォルトの名無しさん
14/01/28 01:37:20.21
>>237
>>238の言うとおり、kannsuu1やkannsuu2はセルの値を入れる「変数」。
変数っていうのはプログラマの意図に反して勝手に中身の値が変わられると困る
(そもそもある値を一時的に保持しておく目的で変数というものが存在する)ので、
プログラム的に指示がない限り、勝手に中身が書き換わることは普通はない。
なのでそのコードは、A列のi行目と(i+1)行目のセルの値が一致する箇所を発見するまで
A列を上から下へ走査するという目的のコードであるなら、
間違いではない(最善ではないかも知れない)。
むしろ6、7行目を消そうとする理由が知りたい。
240:デフォルトの名無しさん
14/01/28 01:54:30.04
>>237
i = 1
k1 = 0
k2 = 0
while k1 = k2
..k1 = cells(i+0,1)
..k2 = cells(i+1,1)
..i + 1
loop
または
i = 1
while cells(i+0,1) = cells(i+1,1)
..i + 1
loop
debug.print cells(i+0,1), cells(i+1,1)
241:デフォルトの名無しさん
14/02/04 21:02:33.55
win 7 excel 2013なんですけど、
配列の数を取得するにはどうすればいいんでしょうか
UBoundって入力しても補完で出てこないし、
オブジェクトブラウザーで調べてみても存在していないんですが
242:デフォルトの名無しさん
14/02/04 21:53:17.23
>>241
HELP参照するか、ググルと沢山有る
243:デフォルトの名無しさん
14/02/04 22:49:10.29
教えてくれんのですか
ググり力を鍛えなければなぁ
244:デフォルトの名無しさん
14/02/05 01:40:01.47
office2013のリファレンスみたけどUBoundはあった
でも、やっぱ俺の環境にはUBoundねーぞ
UCaseはあんのにどういうこっちゃ
245:デフォルトの名無しさん
14/02/05 03:55:50.64
うちの2007でもUBound,LBoundは補完されないな
オブジェクトブラウザにもみつからない
でも普通に使えるしヘルプはF1で参照できる
WordやACCESSでも同じだったから、VBEの問題かもね
246:デフォルトの名無しさん
14/02/05 05:28:39.22
2010でもUbound補完されない
けど気にせず入力しちゃえば普通に使える
247:デフォルトの名無しさん
14/02/05 20:25:50.87
使えました!
補完出ないとかありえなくないですかw?
248:デフォルトの名無しさん
14/02/05 20:37:29.17
ところで、VBA初めてなんですが、
Javaでいうリスナーを動的に設定するには何かいい方法ありますか?
text_ChangeAfter みたいなところに記述するのは、
数が増えると大変なので
エクセルテーブルにコンポーネントとそれに対する処理方法を記載しておいて、
例えば、郵便番号textには郵便番号処理(4桁目に-を挿入)をやらせるとかしたいです
249:デフォルトの名無しさん
14/02/05 20:37:50.41
他にも補完が効かないものもあるからなぁ datediffとか
まだ他にもあるんかな
250:デフォルトの名無しさん
14/02/05 20:57:01.65
>>246 UBoundは「関数」でなく「構文」だ。文字の色を見ろ。
>>248
Excelでコードを半自動生成すると捗る。
Private Sub TextBox5_Change(): Call 処理8(TextBox5): End Sub
Private Sub TextBox6_Change(): Call 処理3(TextBox6): End Sub
251:デフォルトの名無しさん
14/02/05 21:16:07.29
>>250
大変興味深いです
でも、それはやっぱり
TextBox5_Changeメソッドに記述するという方法になってしまいますか?
252:デフォルトの名無しさん
14/02/05 22:30:17.57
テキストボックスに入力した文字列をシート内から検索できるようなVBAをWEBで見つけました。
(テキスト入力→ボタンを押す→検索される)
Sub ボタン1_Click()
On Error GoTo エラー処理 '検索文字が見つからなかったときはエラー処理へジャンプ
Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate'シート全体を対象に検索
TextBox1.Value = "" 'テキストボックスの入力文字を消去
Exit Sub '検索文字が発見できた場合はここで終了
エラー処理:
MsgBox "見つかりませんでした"
TextBox1.Value = ""
End Sub
この場合、同じ文字列が複数有る場合、2つめ以降が検索できません。
2つめ以降を検索できるようにするにはどうすれば良いでしょうか?
253:デフォルトの名無しさん
14/02/05 22:38:15.96
あまりオススメしないけど、
「WithEventsを使用してコントロールのイベントを受け取って、
別オブジェクトのActionPerformedメソッド?を呼び出す」
クラスを作りまくる方法もある
254:デフォルトの名無しさん
14/02/05 23:04:34.06
>>253
ありがとうございます
まさにそれらしい記事を発見いたしました
URLリンク(ateitexe.com)
家にexcelがないのですが、会社で試してみたいと思います
それと、textboxのプロパティで郵便番号ならIMEを半角数字限定
住所なら全角ひらがなとか設定できたと思いますが
それをテンプレートとして保存するような機能はありますでしょうか?
プロパティのこことここを直して~だと設定ミスが出るので、
テンプレから反映できたらなぁと
これもテーブルに定義してもいいのですが
255:デフォルトの名無しさん
14/02/06 00:21:03.25
>>252
>Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate
どの位置から検索するかを引数に与えることができたはずだから、
変数を用意して位置情報を扱うように改造すれば、連続して検索出来るよ
その際、検索処理をWhile Loop内にするのが一般的だと思う
256:デフォルトの名無しさん
14/02/06 00:23:20.25
>>254
VBAスレだから、その、作ればいいと思うよ
257:デフォルトの名無しさん
14/02/06 01:01:49.69
>>250
すくなくとも、ヘルプにはUBound「関数」とかいてあるわけですが
入力補完はしないくせに、uboundと書くとちゃんとUBoundにしてくれるんだな
258:デフォルトの名無しさん
14/02/06 01:30:45.07
>>250
msdnにもUBound Functionて書いてあるよ
URLリンク(msdn.microsoft.com)(v=office.14).aspx
259:デフォルトの名無しさん
14/02/06 01:31:48.95
リンク失敗
URLリンク(msdn.microsoft.com)
260:デフォルトの名無しさん
14/02/08 01:24:05.94
Javaやってたから継承とかできないとかクソとか思ってたけど、
variantとかめっちゃ便利やった
261:デフォルトの名無しさん
14/02/08 01:36:34.71
VBとかVBAはオブジェクト指向言語ではないが
オブジェクト指向言語のいいとこ取りはしてるってこと
262:デフォルトの名無しさん
14/02/09 02:17:26.39
継承とかできないとかクソとか言ってる奴は、まだまだ「言語に使われてる」レベル
継承出にないよりは出来た方が良いって話なら当然のことだけど
出来ないなら出来ないなりに使いこなせる奴が、「言語を使ってる」奴だ
263:デフォルトの名無しさん
14/02/09 05:10:14.13
とは言えやっぱり使えるにこしたことはないよ。
昔のアセンブラなんかは掛算や割算も自前でロジックを組まなければならない時も
あったけど、今そんなの嫌でしょ?
例えば配列の中の値をソートしたいとして、それが出来るメソッドが最初から有ったとき、
わざわざ自前で作る必要はないよね?
そのロジックの仕組みを知ってて使うのと、知らないで使うのも違うけど、
そのロジックの仕組みを知ってても、そう言った便利機能を使えるのと使えないのではやっぱり違うよ。
264:デフォルトの名無しさん
14/02/09 10:56:14.31
>>262
> 継承とかできないとかクソとか言ってる奴
と
> 出来ないなら出来ないなりに使いこなせる奴
は、別に排他じゃないだろ。
バカなの?
265:デフォルトの名無しさん
14/02/09 10:58:13.72
ソートも凝った条件付けようとしたら、結局自作になるから
組込機能頼りってのも、良いことばかりではないけどね
例えば
数値の1~3と、英大文字のA~Cと、英小文字のa~cをソートした場合、Excelの並べ替えだと
「1,2,3,a,A,b,B,c,C」だが、
「1,2,3,A,B,C,a,b,c」にしたい場合や
「A,B,C,a,b,c,1,2,3」にしたい場合や
「1,2,3,a,b,c,A,B,C」にしたい場合とかもある
また数値だと
「7,8,9,40,50,60,100,200,300」だが、文字列数字だと
「100,200,300,40,50,60,7,8,9」になるので、文字列でも数値への変換無しに、
数値と同じ並べ替えをしたい場合や、逆に数値を文字列数字の順にしたい場合もある
便利なモノほど利用者をバカにすると言われてるわけで、
もちろん便利じゃないものを使いこなせる能力を持った上で、
便利なものを有効活用して工数を減らすのは良いが
便利なものに頼りきりになってしまうのも、問題と言えば問題だな
266:デフォルトの名無しさん
14/02/09 13:59:41.61
>>265
大体は同意だけど、
>便利なモノほど利用者をバカにすると言われてるわけで、
これは少し違うと思う。
便利なものが有った場合、今度はそれをいかに有効活用するかということと、
自分で考えて作った方がいいかの選択肢が出てくる。
上のような例の場合、本来の項目を変えずに別項目を作って、
そこに前0で埋めたり、大文字変換した値を用意してソートすれば事足りる。
それもダメだというならそう言うLinqとラムダ式で組めばいい。
視点が変わるのと、出来ることが増えることによって夢がひろがりんぐになるわけだ。
267:デフォルトの名無しさん
14/02/09 14:13:43.52
解ってないのか
268:デフォルトの名無しさん
14/02/09 19:53:17.21
解らなくてもいい
理解しろ
269:デフォルトの名無しさん
14/02/10 00:39:22.03
>>265
そう思うんなら中間言語使って頭鍛えなよ。
そんなのの成り立ち一々全部理解しなきゃいけないなら
VBAでだってまともに組めないよ。
270:デフォルトの名無しさん
14/02/10 10:47:10.65
>>265
便利なものが人をバカにするんじゃなくて
便利なものに頼りきる人はもともとバカだっただけ
271:デフォルトの名無しさん
14/02/10 15:31:20.21
>>265
それはExcelのソートのインターフェースが糞なだけ。
まともな言語ならラムダ式とかで比較を書ける。
クイックソートとかをいちいち真面目に実装するのは面倒だろ。
272:デフォルトの名無しさん
14/02/10 17:52:51.32
20年前に仕様が固まったBasic言語に文句言う奴
273:デフォルトの名無しさん
14/02/10 21:17:25.11
>>271
Javaってラムダ式あったっけ?
274:デフォルトの名無しさん
14/02/10 22:12:34.15
>>273
Java8で導入とか何とか。
275:デフォルトの名無しさん
14/02/10 22:59:24.35
>>272
Basicと言う観点から見れば仕様が固まるなんてことはないよ。
時代に合わせてる常に仕様は変わる。
VBAがたまたまVB6.0辺りの仕様で停滞してるだけ。
もっと前のN-Basic辺りは
Console 0,25,0,1とかおまじないのようにみんな付けてたけど、
VBAから入った人にしてみれば何のこっちゃってことになる。
276:デフォルトの名無しさん
14/02/11 08:44:06.43
便利なことって言うより新しいことに頭がついていけないじじいなんだろ
277:デフォルトの名無しさん
14/02/11 10:11:19.84
Excelでもバージョンアップのたびに関数がどんどん追加されてるけど
古いシステムでも修正なしで動くように新しい機能をわざと使わないことならある
278:デフォルトの名無しさん
14/02/11 11:13:16.08
windows xpとoffice2003廃止に伴い、
もうバージョン違いに悩まないで良くなるのかなあ。
279:デフォルトの名無しさん
14/02/11 12:02:07.37
古いのがなくなるのとバージョンアップは無関係だろ
これからもどんどん新機能が追加されてくに決まってる
280:デフォルトの名無しさん
14/02/11 14:29:28.14
未だにOffice2000使ってますが、特に問題ないです。
281:デフォルトの名無しさん
14/02/11 23:00:10.06
特定のセルに入力がないと空欄になるようにif関数が入力してあるんですが、
空欄のセルだけ非表示にできるようにはどうマクロを組めばよいのでしょうか。
数式が入っていなければ非表示にできるようには組めるのですが、
見た目上は空欄でもセルには数式が入力されているため上手くできません…。
どうかご教授ください。
282:デフォルトの名無しさん
14/02/11 23:05:27.59
>>281
セルの非表示ってどうやってやってるの?
283:デフォルトの名無しさん
14/02/11 23:41:26.34
>>282
セルではなく行の非表示でした。
例えばa1からa10に入力がない場合ですが、
If [Counta(a1:a10)] < 11 Then
Range("a1:a10").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End If
で処理をしています。
ですがこれだと関数で空欄になっていてもセルには数式が入っているので、
非表示にはならないので困っています。
284:デフォルトの名無しさん
14/02/12 07:33:54.19
>>283
ちょっと思い出せないけどxlCellTypeBlanks以外に何かなかったっけ?
ないなら判定を自分で作ればいいかと
285:デフォルトの名無しさん
14/02/12 10:47:06.24
普通にValueとかTextプロパティを見ればいいだけでは
286:デフォルトの名無しさん
14/02/12 12:30:57.75
>>283
For Each c In Range("a1:a10")
If c.Text = "" Then Rows(c.Row).Hidden = True
Next
287:デフォルトの名無しさん
14/02/12 14:37:20.00
CountBlankでいいんじゃないか
288:デフォルトの名無しさん
14/02/12 14:40:01.25
>>286
それだと1個でも空白セルがあったら非表示になるんじゃ
289:デフォルトの名無しさん
14/02/12 16:22:45.01
>>288
For Each でA1:A10内の各セルを一個ずつ選んで
そのセルのテキストが""だったらセルの行全部を削除する
これは>>283の要求どおりの動作だと思う
290:289
14/02/12 16:25:01.52
ごめん、書き間違えた
削除じゃなく非表示だった
291:デフォルトの名無しさん
14/02/12 17:49:50.09
>>289
ああ、行単位でコントロールするのか
If [Counta(a1:a10)] < 11 Then しか見てなかったわ
292:デフォルトの名無しさん
14/02/12 19:19:18.29
そもそも最初のIfって必要か?
1行も消さない場合のがよっぽど多くないと、このロジックだとむしろナノ秒単位で遅くなるだろ
293:283
14/02/12 19:43:37.89
>>286
このマクロで思った通りの処理をしてくれました、ありがとうございます。
ですが思ったよりも処理に時間がかかってしまうようです...。
レスを下さった方々ありがとうございます!
294:デフォルトの名無しさん
14/02/12 19:47:46.74
>>293
まとめて処理すればいいよ
もらったコードに手を加えちゃダメってわけじゃないんでしょ?
295:デフォルトの名無しさん
14/02/12 19:56:10.39
>>293
えっ調べるのはA列だけでいいの?だとしたら>>283のコードはなんだったのか…
遅いと感じるならScreenUpdatingを入れればたぶん一瞬で終わるよ
296:283
14/02/12 20:26:25.50
マクロを断片的に覚えているので質問や発言がチグハグになってしまい申し訳ありません…。
レスくださった方のものを参考にさせていただいて自分で再度考えてみます。
ご迷惑おかけしました、ROMに戻ります。
297:デフォルトの名無しさん
14/02/14 03:55:36.59
エクセルは2000、VBAは6.0です。
ウェブの某サイトに自動ログインするマクロを作っています。
IDとパスワードはうまく入力させることができたのですが、
ログインができません。
ログインボタンが次のようなソースコードのサイトに
ログインするにはどうしたら良いでしょうか?
<input type="hidden" name="SsLoginPage" value="/members/" id="hidden1">
<input type="hidden" value=" ログイン " id="submit1" name="submit1">
<input type="image" src="../../ssl_img/login/btn_login.gif" alt="ログイン" tabindex="300" id=image1 name=image1>
298:デフォルトの名無しさん
14/02/14 19:01:26.24
>>297
スレ違い
299:デフォルトの名無しさん
14/02/14 21:24:22.54
>>297
できてるところまでソース貼って
300:デフォルトの名無しさん
14/02/14 22:46:45.67
>>299
サイトは伏せさせてもらっていいでしょうか? ネットで調べて無理矢理作ったので洗練されてません。
Sub 自動ログイン()
Dim obj As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://《ログインしたいサイト》"
Do Until objIE.Busy = False
Do Until objIE.ReadyState = 4
Do Until objIE.Busy = False
DoEvents
Loop
Loop
Loop
CreateObject("WScript.Shell").AppActivate "《ログインしたいサイトのタイトル》"
Set objU = objIE.document.getElementsByName("SsLogonUser")
If objU.Length = 0 Then
MsgBox "ログインページが変わった?"
WScript.Quit
End If
objU(0).Value = "《ID番号はここ》"
Set objU = Nothing
objIE.document.getElementsByName("SsLogonPassword").Item(0).Value = "《パスワードはここ》"
Set objU = Nothing
'このあと、ログインできるようにしたいのですが…
End Sub
301:デフォルトの名無しさん
14/02/15 11:58:56.47
質問です
ExcelシートにユーザフォームでDTPickerを貼り付けて、日付をこのカレンダーで
選択すると、フォームがある位置の陰になっているセルにこっそり日付格納して
マクロでその日付を使うように作成しました。
ところがこのカレンダーが動く人と動かない人がいて困っています。
(クリックしてもユーザフォームが固定された状態でカレンダーが表示されない)
環境はExcel2010で作成および表示
拡張子は会社の方針で互換重視のxls(関連会社とのファイル共有などのため)
どうもExcel2000でファイルを開くと動くというのも確認されていて、意味不明です。
インスコされている環境も社内標準環境なので、ランタイムが異なるなど無いはず
なんですが…
解決策の心当たりがあればよろしくお願いします。
302:デフォルトの名無しさん
14/02/15 13:34:19.94
>>301
ここにアクセスがインストールされてないとどうたらとか
アクセスが無くてもVBランタイムが入ってれば動くけど
それをエクセルで使うのはライセンス違反がどうたらとか色々書いてある
URLリンク(www.h3.dion.ne.jp)
303:デフォルトの名無しさん
14/02/15 NY:AN:NY.AN
>>302
URLリンク(kojikoji75.hatenablog.com)
の Date and Time Picker Control を使っているのでライセンス等は大丈夫なはずです
よく見るとAxtiveXコントロールとあるので
URLリンク(www.ilovex.co.jp)
と同じ罠に引っかかってるかもです(症状が良く似ている印象)
とりあえず月曜会社で試してみますが、これで解決しなかったら本格的に分からないw
304:302
14/02/15 14:44:20.37
>>303
その Date and Time Picker Control てのは2007から実装されたんでしょ?
それだと>>301で言ってた「2000で動く」ってのはおかしくない?
305:301
14/02/15 15:10:33.32
>>302
言われてみると確かにおかしいですね
でも2kで「動いた」って目の前で見せられたので…
昨日発覚したばかりなので、月曜改めて周囲の状況も含め確認してきます。
306:デフォルトの名無しさん
14/02/15 17:36:08.31
2000と2007って同時にインストールできるんじゃまいか
307:デフォルトの名無しさん
14/02/17 21:49:42.74
質問です。長いので二つに分けて質問させてください
Sub 総計計算_送料()
Dim 行番号 As Currency
Dim 工場直送送料 As Currency
Dim 受注生産送料 As Currency
Dim 送料合計 As Currency
行番号 = 14
送料合計 = 0
工場直送送料 = 500
受注生産送料 = 800
Do Until Cells(行番号, 4) = ""
If Cells(行番号, 6) = "工場直送" Then
送料合計 = 送料合計 + 工場直送送料
ElseIf Cells(行番号, 6) = "受注生産" Then
送料合計 = 送料合計 + 受注生産送料
308:デフォルトの名無しさん
14/02/17 21:54:21.14
上記のような構文の場合、
例えば
送料合計 = 送料合計 + 工場直送送料は
0 = 0 + 500
と、工場直送送料は「500」として計算されると思うのですが
Do Until Cells(行番号, 4) や If Cells(行番号, 6)といった式の場合
なぜいきなり(14 , 4)セルや(14 , 6)セルといったセルに飛ばずに、
ちゃんと一行目のセルから計算されるのかわかりません。
本当に初心者でアホな質問だと思うのですが、答えて欲しいです。
309:デフォルトの名無しさん
14/02/17 22:18:32.41
>>307のプログラムが途中で切れてるから推測だけど単純な入力ミスしてる
310:デフォルトの名無しさん
14/02/17 22:26:13.83
>>308
ステップ実行で1行ごとに各変数の値を確認してみたら?
311:デフォルトの名無しさん
14/02/18 03:36:11.85
むしろ1行目から計算されているというのが勘違いじゃないのか
312:デフォルトの名無しさん
14/02/18 07:28:15.08
行番号にCurrencyを使うな気持ち悪い
313:デフォルトの名無しさん
14/02/18 11:22:50.43
タシカニ
314:デフォルトの名無しさん
14/02/18 14:32:12.07
だな。
IntegerじゃないぞLong使えよ
315:297
14/02/19 01:25:10.63
>>300誰か分からないでしょうか…?
316:デフォルトの名無しさん
14/02/19 12:30:10.58
>>315
残念ながらわかりません
ごめんなさい
317:デフォルトの名無しさん
14/02/19 13:51:27.51
>>315
ログインボタンのクリックは
objIE.document.all.btn01.Click
みたいに書く
ページ内にクリックできる場所が複数ある時はボタン番号を適切に変える
「戻る」「入力内容をクリア」「IDをクッキーに保存」とか色々と並んでる場合があるからね
ていうか検索ぐらいしろよ
「VBA IE操作 クリック」みたいなキーワードでサンプルがいくらでも出てくるぞ
318:デフォルトの名無しさん
14/02/19 21:09:16.21
=IFERROR(HYPERLINK(VLOOKUP(Cells(n1,5),$Q$2:$R$10,2,TRUE)),"")
上記を代入したいんですがうまくいきません。
n1は任意の変数です。Vlookupのところではねられます。
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), "")"
考えてやってみましたがこれではダメっぽいです。
ご教授いただけると助かります。
319:デフォルトの名無しさん
14/02/19 21:49:24.13
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), """")"
とりあえずこんな感じ?
320:319
14/02/19 21:52:23.42
>>318
ダブルクォーテーションをダブルクォーテーションで囲んだ中で使うときは
"" と2個続けるっていうルールになってるよ
321:デフォルトの名無しさん
14/02/19 21:58:31.80
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$2:$R$10, 2, True)), """")"
322:デフォルトの名無しさん
14/02/20 00:46:24.24
>>317
それで番号をひと通り押してみたんですけど
どれもダメでした
>>297のソースコードでもボタン形式でいいのでしょうか?
>>316
丁寧にありがとうございます
323:デフォルトの名無しさん
14/02/20 01:24:13.28
>>322
よくわからんけどinputタグにname=image1って書いてあるからクリックするのもimage1と違う?
324:デフォルトの名無しさん
14/02/20 01:55:37.89
>>317
>>323
すげえええええええ
objIE.document.all.image1.Click
であっさり通りました
ありがとうございます