Excel VBA 質問スレ Part32

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ExcelのVBAに関する質問スレです

★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/
2デフォルトの名無しさん:2013/10/07(月) 22:20:27.82
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/
19 http://hibari.2ch.net/test/read.cgi/tech/1305754555/
20 http://hibari.2ch.net/test/read.cgi/tech/1312435844/
21 http://hibari.2ch.net/test/read.cgi/tech/1316931607/
22 http://toro.2ch.net/test/read.cgi/tech/1322400978/
23 http://toro.2ch.net/test/read.cgi/tech/1327763113/
24 http://toro.2ch.net/test/read.cgi/tech/1334305148/
25 http://toro.2ch.net/test/read.cgi/tech/1341722983/
26 http://toro.2ch.net/test/read.cgi/tech/1345363310/
27 http://toro.2ch.net/test/read.cgi/tech/1353842387/
28 http://toro.2ch.net/test/read.cgi/tech/1359607536/
29 http://toro.2ch.net/test/read.cgi/tech/1364689772/
30 http://toro.2ch.net/test/read.cgi/tech/1370088822/
3デフォルトの名無しさん:2013/10/07(月) 22:21:12.68
あっちはコード作成依頼スレ
http://toro.2ch.net/test/read.cgi/tech/1381151717/
4デフォルトの名無しさん:2013/10/07(月) 22:35:27.60
テンプレ終了
5デフォルトの名無しさん:2013/10/08(火) 07:40:28.60
>>1★5は「コードを書いてはいけません」という意味です。
経緯は過去ログを見てください。

「コードを書いてはいけません」

大事なことなので二回言いました。
6デフォルトの名無しさん:2013/10/08(火) 07:59:12.14
>>5
クレクレ君はお断りという意味。
クレクレ君に餌を与える行為もお断りっていう意味もあるね。

自分は本スレに干渉しておきながら、他人にはコード作成依頼スレを干渉するなと命令するのは虫が良すぎるだろ。
7デフォルトの名無しさん:2013/10/08(火) 11:44:35.65
>>5
いや、書くし。
お前には止められないよ。
8デフォルトの名無しさん:2013/10/18(金) 19:20:53.39
過疎ってるなw
9デフォルトの名無しさん:2013/10/22(火) 12:16:24.02
これからはVSTOの時代!
10デフォルトの名無しさん:2013/10/22(火) 13:19:18.33
【教育】灘高校生「いまさらエクセルを学ぶより、プログラミングを学ぼう。できて当たり前の時代が来る」
http://uni.2ch.net/test/read.cgi/newsplus/1382414731/
11デフォルトの名無しさん:2013/10/26(土) 13:42:28.95
なぜ1文字変数がダメなのか語り合うスレです。
まずは>>1どうぞ意見を述べてください。
12デフォルトの名無しさん:2013/10/26(土) 15:53:02.34
236 名前:デフォルトの名無しさん :2013/10/26(土) 15:31:45.81
  >>232
  そんなに一文字変数を使いたいのなら仮引数も一文字に統一しろよw
  統一感全くなしw
  書いてて恥ずかしくないのかな。

ローカル変数と引数は異なるものだから同じにするのはどうかと思うなあ。
13デフォルトの名無しさん:2013/10/26(土) 17:55:38.35
242 名前:デフォルトの名無しさん :2013/10/26(土) 17:45:50.38
  これはもの凄くいい例が出て来たな。
  >>240
  「VAL関数は」の後に「1文字ずつ値を取得し」の文が挿入されていれば理解出来るだろうか。
  これは1文字変数にも通じる所があって、本人は分かっていて相手も分かると思っていても
  実は相手は理解に至らないということがままあるということだ。
  ましてや1文字変数など、その変数の意味を一見で理解するのはもっと困難だろう。

こじつけだな。ちょっと黙っててくれないかな。
14デフォルトの名無しさん:2013/10/26(土) 18:51:43.68
その変数のスコープが見渡せる範囲、一般的に使われるループカウンタ等
1文字でも十分な事があるのは今まで散々論議されてる

ソース全体での使われ方を見ないで単に変数の長さだけを問題にするやつは相手にする価値はない
15デフォルトの名無しさん:2013/10/26(土) 18:52:49.90
こっちに書くってのはいいね
16デフォルトの名無しさん:2013/10/26(土) 18:58:12.17
>>14
俺もそれに完全に同意。
17デフォルトの名無しさん:2013/10/26(土) 19:13:35.80
この件は既にマイクロソフトから推奨されているコーディング技法が
あると分かった時点で議論の余地はない。
むこうのスレの>>196はいいものを見つけてくれたもんだ。

196 :デフォルトの名無しさん:2013/10/26(土) 03:59:07.74 そういや前なんかそんなことで荒れてたね。
何かこんなの見っけたよ。

http://msdn.microsoft.com/ja-jp/library/aa291593.aspx#vxconcodingtechniquesanchor3

これはVisualStudio.Netのものだけど
VB.Netの元になっているVB6も、VB6と同じ文法のVBAも
当てはまりそうなんで載せとくよ。
18デフォルトの名無しさん:2013/10/26(土) 19:34:25.93
256 :デフォルトの名無しさん:2013/10/26(土) 19:22:27.05
  >>252
  公開範囲考えるなら可読性も考えろよ。
  関数が短いからと言っても処理を見るまで分からないものは可読性は低い。
  1文字変数をよしとするとそれ以外の変数と混在させそう。
  こうなると、作り手が何考えてるのか分からなくなる。
  知らないうちにバグを埋め込むことになってるって意識ないんんだろうなぁ。

  1文字変数だけじゃなくコメントなしっていうのも大いに問題があるんだが。

1文字変数をなくしたところで可読性は変わらないよ。むしろ悪くなるんじゃないかな。
19デフォルトの名無しさん:2013/10/26(土) 21:21:52.87
コードの可読性なんてコメント次第だろ
どうして数式やロジックをいちいち解読すること前提で話を進めるんだよ
20デフォルトの名無しさん:2013/10/26(土) 21:26:21.83
>>19
この変数はこのループでしか使わないものですなんて
間抜けなコメント書かないだろ。コードの可読性とコメントは別物だよ。
21デフォルトの名無しさん:2013/10/26(土) 21:36:04.30
ここで言う可読性ってのは、コメントとかがなくてコード読んで行くときに
どのくらいそのコードが読みやすいか、って問題を話してるんだが
22デフォルトの名無しさん:2013/10/26(土) 21:49:12.14
逆に言えば可読性を失わなければ1文字でも問題ないわけ
23デフォルトの名無しさん:2013/10/26(土) 21:50:19.58
ijはループ用の捨て変数だってことぐらいわかれ
常識以前の問題
24デフォルトの名無しさん:2013/10/26(土) 22:12:12.01
265 :デフォルトの名無しさん [↓] :2013/10/26(土) 22:08:00.69
  なるほど。
  多数の初心者が来るこのスレで
  可読性そっちのけで相手の技術力だよりと言うことか。
  余り威張って言えることではないな。

変数のスコープが狭ければ1文字変数使っても可読性は落ちないよ。
25デフォルトの名無しさん:2013/10/26(土) 22:15:43.72
何かループ変数を捨て変数と言っちゃうやつがいるな
常識が欠落しすぎて失笑
26デフォルトの名無しさん:2013/10/26(土) 22:21:28.82
>>25
捨て変数ってなんだろ・・・

それでは実装を比較してみようか。
クイックソートを実装してみよう。
俺は1文字変数使って実装するから
>>25は1文字変数使わずにこれが理想だって言うのを書いてみて。
もちろんコメントを入れるのがいいと思ってるのならコメントも入れて。
27デフォルトの名無しさん:2013/10/26(土) 22:29:28.51
一時的な変数にがっちり名前付けなきゃいけない状況、それ自体が設計ミスやろ

qsort [] = []
qsort (pivot:xs) = qsort [x | x <- xs, x < pivot] ++ [pivot] ++ qsort [x | x <- xs, x >= pivot]
28デフォルトの名無しさん:2013/10/26(土) 22:32:35.52
268 :デフォルトの名無しさん [↓] :2013/10/26(土) 22:31:28.29
  >>267
  ネットに残してるわけだから1文字変数なんて使えないだろw

イミフw
29デフォルトの名無しさん:2013/10/26(土) 22:44:43.22
272 :デフォルトの名無しさん [↓] :2013/10/26(土) 22:40:34.17
  >>267
  言いたいことは分からなくもない。
  だが初心者などはその様な背景を読み取れる訳もなく、
  そのままそれを当たり前だと思ってしまう。
  俺には1文字変数を使うなという強制力は全く無いが、
  それはクソコードだと罵られるのは仕方のないことだとも同時に思っている。

当たり前と思って何が悪いんだ。クソコードと罵るのは自分なのに
まるで責任が自分にないかのような言い方だなあ。
30デフォルトの名無しさん:2013/10/26(土) 22:48:10.47
273 :デフォルトの名無しさん [↓] :2013/10/26(土) 22:45:58.16
  >>267
  短いコードなら最初からきちんと作っても、適当に作るのとそんなに時間は変わらない。
  何が問題なのかさっぱりなんだが。
  っていうか可読性を無視してる時点でアセンブラでも使ってろと言いたい。

だから1文字変数使っても可読性落ちないってば
31デフォルトの名無しさん:2013/10/26(土) 22:59:16.31
できた

Sub Quick(a)
  InQuick a, LBound(a), UBound(a)
End Sub

Sub InQuick(a, lo, up)
  l = lo
  g = up
  p = a(lo)
  Do While l <= g
    Do While a(l) < p
      l = l + 1
    Loop
    Do While a(g) > p
      g = g - 1
    Loop
    If l > g Then
      Exit Do
    End If
    Swap a, l, g
    l = l + 1
    g = g - 1
  Loop
End Sub

Sub Swap(a, x, y)
  t = a(x)
  a(x) = a(y)
  a(y) = t
End Sub
32デフォルトの名無しさん:2013/10/26(土) 23:05:30.25
アルゴリズムアルゴリズムしたプログラムは変数名長くしてもニュービーにはどんな処理やってるかわからないからなあ
逆にそのアルゴリズム知ってる奴からすれば変数名は関係なくコードの形だけでやってることは把握できるし
33デフォルトの名無しさん:2013/10/26(土) 23:26:37.64
287 :デフォルトの名無しさん [↓] :2013/10/26(土) 23:24:28.02
  >>286
  今更何言ってんだ?w

逃げちゃった・・・
34デフォルトの名無しさん:2013/10/26(土) 23:32:18.85
293 :デフォルトの名無しさん [↓] :2013/10/26(土) 23:30:30.31
  >>289
  >>189であれば、rの意味するもの、cの意味する適切な名前をつければいいだけだと思うが。
  糞コード読む気にもならないから何を意味するものか知らんから書けないw

わからないんだ……
35デフォルトの名無しさん:2013/10/27(日) 01:02:38.55
読まずに糞コードかどうかがわかるなんてスゴイナー
36デフォルトの名無しさん:2013/10/27(日) 01:27:28.70
え、おまえわかんないの?
37デフォルトの名無しさん:2013/10/27(日) 01:42:44.41
俺は署名見ただけでわかる。
38デフォルトの名無しさん:2013/10/27(日) 02:00:39.33
話の流れで「お、そろそろ糞コードが貼られるターンだな」って直感する
39デフォルトの名無しさん:2013/10/27(日) 02:10:44.18
>>38が直感してるあたりで、そろそろ俺のコードの出番かなと思ってる。
40デフォルトの名無しさん:2013/10/27(日) 02:47:42.38
ここってコードが貼られるほうのスレを観察して観想言うスレになっちゃったの?
41デフォルトの名無しさん:2013/10/27(日) 07:31:44.97
>>40
ここは荒らしを隔離するためのスレってことでいんじゃないかな。
あっちのスレで荒らしにレスして汚したくないんだよね。
42デフォルトの名無しさん:2013/10/27(日) 08:03:49.26
>>40
テンプレを見ればわかるようにここが本スレです
43デフォルトの名無しさん:2013/10/27(日) 10:05:07.77
>>42
良かったじゃないか
多少なりとも賑わって
44デフォルトの名無しさん:2013/10/29(火) 18:15:59.91
で、結局テンプレ厨の手本コードは上がったの?
それとも本当に口だけ?
45デフォルトの名無しさん:2013/10/29(火) 20:09:38.23
どの分野もそうですが、評論家はプロじゃないんですよ
コードが書けるわけないじゃないですか
46デフォルトの名無しさん:2013/10/29(火) 20:29:33.83
じゃあもう命名
口だけテンプレ君
でいいな
47デフォルトの名無しさん:2013/10/29(火) 23:31:40.42
498 名前:デフォルトの名無しさん [sage] :2013/10/29(火) 22:57:57.20
人のコードにいちゃもん付けてコード書けない奴ってなんなの?
48デフォルトの名無しさん:2013/10/30(水) 08:41:20.76
>>45
的確な事やもっともな事を言える評論家ならまだしも
コードも書けない上に、下らないいちゃもんしか書けない
口だけ厨は単なる鼻つまみ者だし

もっと実のある書き込みをする人だったら
ここまで馬鹿にされまくることもないだろうに
49デフォルトの名無しさん:2013/10/30(水) 18:03:45.31
誘導されて来ました。
荒らしまくっていいスレはここですか?
50デフォルトの名無しさん:2013/10/30(水) 19:11:59.82
>>49
すでに荒地状態なのでいくらでもどうぞ
51デフォルトの名無しさん:2013/10/30(水) 20:04:57.06
では、以下に付いて議論しましょう
・1文字変数の許容可否
・Nothingによる変数の後始末
・クレクレ君の許容可否
・口だけテンプレ君の存在価値
52デフォルトの名無しさん:2013/10/31(木) 00:21:00.08
ここのスレではそれらの全てを許容しません。
特に3番目は丸投げ、4番目はコードすら書けないということはプログラマですらないということで
>>1★5に抵触する可能性があります。
以後クレクレ君、口だけテンプレ君はこのスレではスレ違いになると認識してください。
53デフォルトの名無しさん:2013/11/01(金) 13:31:13.81
別のシートからの値を書き込みシートに格納し
格納した値をもとにδr、δg、δbを計算して出力するというプログラムなのですが
81600行くらいしたところで ”実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです。”とでます。
何がだめなのでしょうか。
5453:2013/11/01(金) 14:10:22.01
これがコードです。
https://friendpaste.com/wQmRdo4I0YvpYqsEVhdCk
55デフォルトの名無しさん:2013/11/01(金) 14:29:09.52
メモリ不足じゃね
56デフォルトの名無しさん:2013/11/01(金) 15:21:01.55
>>54
いちいちwritesheetに値を書き込むのはなんで?
あと、直接のエラー解消策じゃ無いけど、この程度のデータ量なら配列作ってオンメモリで計算したら?
57デフォルトの名無しさん:2013/11/01(金) 15:27:29.31
>>53
あっちにも回答はあったようだけど、とりあえず。

行数は変数S、Ysで変更している。
81600行ということから、Yのループで何回実行されたかを算出する。

Tのループは最大3263なので
81600 / 3263 = 25.0076・・・
ということで25回程度実行されている。

後は問題となっている行にブレークポイントを貼り付けて
Yが25回付近の時点でステップ実行しながら
変数の値をチェックしていけば何かしら分かると思う。
58デフォルトの名無しさん:2013/11/01(金) 18:15:52.37
>>56
そうなんですよね、別に書き込まなくてもいいんですよね。。。
δr、δg,δ,bを計算すればいいだけですから 笑

そうですね配列でオンメモリ使った方がわかりやすいプログラムかけますね
でも3*4000*3000の値を拾いますけど大丈夫ですかね?
>>57
はい、もっと列を活用しようとおもいます。
59デフォルトの名無しさん:2013/11/14(木) 21:23:57.50
過疎ってますね。
60デフォルトの名無しさん:2013/11/22(金) 10:00:38.91
For Nextループで
ある条件のときそのループをぬけるにはどんなコード書くんでしたっけ?
全体をぬけるExit Forではなく、その単一ループをぬけてiを次の値で繰り返したいんです。
61デフォルトの名無しさん:2013/11/22(金) 10:43:51.83
重複スレにつき本スレ誘導

Excel VBA 質問スレ Part33
http://toro.2ch.net/test/read.cgi/tech/1382015080/
62デフォルトの名無しさん:2013/11/22(金) 10:55:08.38
>>60

Cなんかにある continue ってのは無いから
for next
  if then
  end if
end enxt

でやるしかないのでは?
63デフォルトの名無しさん:2013/11/22(金) 11:08:37.69
そんな釣りに
6460:2013/11/22(金) 11:17:35.03
>>62
ないのですか。ありがとう。

>>63
こら
65デフォルトの名無しさん:2013/11/22(金) 11:38:40.76
for next〜end enxtってなんだ
初心者にいいかげんなこと教えるなよ
VBAはFor〜Nextだぞ
66デフォルトの名無しさん:2013/11/22(金) 11:55:12.50
>>65
ちょっとしたタイプミスぐらいに目くじらを立てんなヴォケ
それくらい判るだろ、低能
67デフォルトの名無しさん:2013/11/22(金) 11:56:27.76
と思ったらちょっとしたタイプミスではなかった^^;
ま、判ってるからいいだろ w
68デフォルトの名無しさん:2013/11/22(金) 13:01:17.73
For ...
 ...
 If ... Then GoTo LOOPEND
 ...
LOOPEND:
Next
69デフォルトの名無しさん:2013/11/22(金) 13:21:05.22
もう一つのPart32スレ
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151717/

の次スレは、このスレじゃなくてこっちです。

Excel VBA 質問スレ Part33
http://toro.2ch.net/test/read.cgi/tech/1382015080/
70デフォルトの名無しさん:2013/11/22(金) 13:22:55.41
>>69
一人でやってろカス
71デフォルトの名無しさん:2013/11/22(金) 13:39:06.67
>>70
Part32時代に、ほとんどの人がこのスレ>>1を忌避し、もう一つのスレしか使ってません。
よって、一人ではありません。

なし崩し的にまた>>1を復活させるのを阻止するための誘導です。

本スレはこちら↓
Excel VBA 質問スレ Part33
http://toro.2ch.net/test/read.cgi/tech/1382015080/
72デフォルトの名無しさん:2013/11/22(金) 13:51:14.72
Part31終了時はグダグダだったしPart33もスレ立て嵐っぽかったけど、結局はほとんどがもう一つのスレを
選択しテンプレ議論に終止符を打ち、さらに次スレまで用意されてたという怪我の功名。
73デフォルトの名無しさん:2013/11/22(金) 13:56:28.02
気を付けろ、巧妙の罠だ
74デフォルトの名無しさん:2013/11/22(金) 14:18:09.06
二つスレッドがあるんですか?@22歳OL
75デフォルトの名無しさん:2013/11/22(金) 15:04:52.96
キタ━━━━(゚∀゚)━━━━!!
76デフォルトの名無しさん:2013/11/22(金) 16:08:16.73
OLちゃんのいる部署で仕事したいわ
77デフォルトの名無しさん:2013/11/23(土) 00:02:08.63
つっても桃白白なんだけどな
78デフォルトの名無しさん:2013/11/23(土) 08:30:35.61
40+1 :デフォルトの名無しさん [↓] :2013/11/23(土) 06:23:37.78
>>38
ネタの質問だな。ググれば数秒で解決。
79デフォルトの名無しさん:2013/11/23(土) 08:32:39.90
44 :40 [↓] :2013/11/23(土) 08:26:50.63
>>41
続きはこのスレでやりましょう。

Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151995/
80デフォルトの名無しさん:2013/11/23(土) 08:39:10.39
http://toro.2ch.net/test/read.cgi/tech/1382015080/41

> 41 返信:デフォルトの名無しさん[sage] 投稿日:2013/11/23(土) 07:15:02.62
> >>40
> ネタなつもりは全くなくて、
> ググっても分からないので聞いているんですが・・・
> WMIのShadowCopyなどを使えば何となく出来る気がするんですが、
> 実際に名前やタイムスタンプを取得する方法を、
> コード上でどう記述すればいいのか未だに分かりません。
> 数秒で解決出来たなら教えて頂いても宜しいでしょうか。

VB6のサイトだけど、使えると思う。
http://www.red.oit-net.jp/tatsuya/vb/FileSystemObject.htm

ファイルシステムオブジェクトだからこれ以上のやり取りはしないけど。
81デフォルトの名無しさん:2013/11/23(土) 08:40:42.40
>>80
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
82デフォルトの名無しさん:2013/11/23(土) 08:44:31.07
>>81
よう、テンプレ厨。
83デフォルトの名無しさん:2013/11/23(土) 08:46:33.85
>>82
このスレはテンプレが絶対のテンプレスレです。
テンプレとわずかでもずれてたら即刻出て行ってもらいます。
84デフォルトの名無しさん:2013/11/23(土) 08:48:42.62
テンプレを読まない人やテンプレを守らない人はこのスレに必要ありません。
どうぞ別スレに行ってください。
85デフォルトの名無しさん:2013/11/23(土) 08:52:15.78
>>81
ようはルールを理解してないというか、理解しようとしてないんだよな。

★3、★4の意味が全く理解できていない。
前にも話が出ていたから説明は割愛するけど、
>>80のレス程度なら問題ないと思うが。
86デフォルトの名無しさん:2013/11/23(土) 08:57:48.65
>>85
>>80は★3★4のルールに明確に違反しています。
あなたに思うところがあるのはわかりますが、このスレはルールを守ってもらうのが絶対原則です。
ルールに従えないならどうぞ出て行って、よそのスレでやってください。
87デフォルトの名無しさん:2013/11/23(土) 09:02:45.32
22歳OLです
重複スレを使うのは止めて頂けませんか?
88デフォルトの名無しさん:2013/11/23(土) 09:22:40.63
46 :デフォルトの名無しさん [↓] :2013/11/23(土) 09:17:57.33
>>45
アンチテンプレ厨の自演ネタ質問なので降りるわ。


わからないだけのくせにwちなみにこいつはテンプレ厨、このスレを建てたやつですww
89デフォルトの名無しさん:2013/11/23(土) 09:47:25.86
48 :デフォルトの名無しさん [↓] :2013/11/23(土) 09:43:33.38
>>45
何の為に必要なの?


49 :デフォルトの名無しさん [↓] :2013/11/23(土) 09:43:54.19
>>45
何の為に必要なの?


荒らしだしたw
90デフォルトの名無しさん:2013/11/23(土) 09:50:16.17
答えようとしたけど頓珍漢なこと言って
カッコつけて逃げようとしたけどバレて
ファビョって荒らす ←いまここ

>>1は毎回こんなことをやっています
91デフォルトの名無しさん:2013/11/23(土) 09:53:25.48
40+1 :デフォルトの名無しさん [↓] :2013/11/23(土) 06:23:37.78
>>38
ネタの質問だな。ググれば数秒で解決。


質問を理解せずにFileSystemObjectをググって見つけて質問を解決した気になっただけのテンプレ厨w
92デフォルトの名無しさん:2013/11/24(日) 13:39:45.22
質問ですが
LANネットワークの共有フォルダに置いてある1つのExcelのファイルを数人で書き換えている場合に
他の人が開きっぱなしにしていて何時間たっても書き込みができない状態で明らかに忘れていると思われるような場合に
VBAのコマンド等で強制的に使用者を非アクセスの状態にすることはできないのでしょうか?
93デフォルトの名無しさん:2013/11/24(日) 13:54:50.59
>>92
VBAのコマンドでほかのPCの操作ができたらびっくりするわ

複数アクセス状態で実行したらどうなるか知らんけど
Workbook.ExclusiveAccessdsで共有解除できるらしいから試してみたら?
94デフォルトの名無しさん:2013/11/24(日) 19:22:18.42
>>92
共有するのはダメなん?
95デフォルトの名無しさん:2013/11/24(日) 20:09:30.78
数値が文字列として保存されてるセルを
すべて普通の数値に変換するためにはどうすればいいですか?
対象はアクティブになってるシートのすべてのセルでそうなってるものすべて。
96デフォルトの名無しさん:2013/11/24(日) 21:33:36.05
>>95
ざっくりやればこんな感じじゃね
Dim c As Range
For Each c In ActiveSheet.UsedRange
If IsNumeric(c.Value) And c.NumberFormat = "@" Then
c.ClearFormats
End If
Next
数値の判定とかいろいろ細かい考慮点はあるかもしれんがしらん
97デフォルトの名無しさん:2013/11/24(日) 21:38:28.16
>>95
全てのセルに対して値が数値であるかどうかみて数値だったら書式を変更すればできるんじゃないの?
98デフォルトの名無しさん:2013/11/24(日) 21:45:22.51
>>96>>97
それじゃできないんですけど。

数値はたとえば
アポストロフィのあと数字を入力した'123や
書式を文字列にしたあとに123と入力したものとか
全然変換されない。
99デフォルトの名無しさん:2013/11/24(日) 21:48:13.50
>>98
そこまで言えるのなら、どうすればできるかわかってるだろうし解決できるでしょ。
100デフォルトの名無しさん:2013/11/24(日) 22:21:26.79
ネタの質問だな。ググれば数秒で解決。
101デフォルトの名無しさん:2013/11/25(月) 08:35:41.82
数秒じゃ無理だな
キーワードを入力、検索ボタンをクリック、までで数秒が過ぎてしまう
場合によってはページの読み込みを待ってる間に数秒が過ぎてしまう

結果がたくさん出る→選ぶ→読む→実行する→結果を確認する
ここまでできて初めて解決と言える
最低でも数分はかかる
102デフォルトの名無しさん:2013/11/25(月) 08:56:08.33
くだらね小学生かよ
103デフォルトの名無しさん:2013/11/25(月) 09:03:11.16
作業工程と所要時間は正確に見積もりましょう
104デフォルトの名無しさん:2013/11/25(月) 11:28:49.74
度数分布表から平均値と標準偏差を算出する一発で算出する方法はありますか?
105デフォルトの名無しさん:2013/11/25(月) 11:35:06.08
そういう関数なりプロシジャなりを作ればいい
106デフォルトの名無しさん:2013/11/25(月) 12:49:38.62
つまりないということですね
わかりました
107デフォルトの名無しさん:2013/11/26(火) 11:11:49.44
セルのコピーのことで教えてください

マクロブックからCSVファイルを開き、その1部をtokei_book(統計データ.xlsx 既にオープン済み))の最終行以降にコピーしようとしているんですが、


Range(Cells(3, 1), Cells(i - 1, 9)).Copy Destination:=Workbooks(tokei_book).Worksheets("sheet1").Cells(lastrow + 1, 1)

この部分でインデックスが有効範囲にありません
ってエラーになってしまっています。
どう直せばいいんでしょうか


tokei_bookには"統計データ"
iには6が
lastrowには504
という値がそれぞれ入っています
108デフォルトの名無しさん:2013/11/26(火) 11:51:02.51
tokei_bookに拡張子いるんじゃね
109107:2013/11/26(火) 11:54:18.06
あら、ほんとだ & ".xlsx" にしたら出来た^^;
んん、ありがとうございます
110デフォルトの名無しさん:2013/11/29(金) 14:28:14.19
VBEの入力支援に出てくるアイコン?のようなものってそれぞれ意味あるかしら
111デフォルトの名無しさん:2013/11/29(金) 15:20:53.25
どうかしらね
しらべてみるわ
112デフォルトの名無しさん:2013/11/29(金) 19:04:14.25
ヘルプやオブジェクトブラウザとかで使われてるアイコンと同じだろ
クラス、メソッド、プロパティ、定数、列挙 ほかなんか有ったっけ
113デフォルトの名無しさん:2013/11/29(金) 19:54:59.51
アイコンは16年位の歴史がある
114デフォルトの名無しさん:2013/11/29(金) 20:29:49.82
アイコン16歳?
115デフォルトの名無しさん:2013/11/29(金) 21:00:05.10
>>113
>>114
おもろいやんけ
116デフォルトの名無しさん:2013/11/29(金) 21:35:56.46
110 名前:デフォルトの名無しさん[sage] 投稿日:2013/11/29(金) 14:28:14.19
VBEの入力支援に出てくるアイコン?のようなものってそれぞれ意味あるかしら

111 名前:デフォルトの名無しさん[] 投稿日:2013/11/29(金) 15:20:53.25
どうかしらね
しらべてみるわ

112 名前:デフォルトの名無しさん[sage] 投稿日:2013/11/29(金) 19:04:14.25
ヘルプやオブジェクトブラウザとかで使われてるアイコンと同じだろ
クラス、メソッド、プロパティ、定数、列挙 ほかなんか有ったっけ

113 自分:デフォルトの名無しさん[sage] 投稿日:2013/11/29(金) 19:54:59.51
アイコンは16年位の歴史がある

114 自分:デフォルトの名無しさん[sage] 投稿日:2013/11/29(金) 20:29:49.82
アイコン16歳?

115 自分返信:デフォルトの名無しさん[sage] 投稿日:2013/11/29(金) 21:00:05.10
>>113
>>114
おもろいやんけ
117デフォルトの名無しさん:2013/11/30(土) 09:17:31.61
VBScriptについて必死に話し合うスレ
http://toro.2ch.net/test/read.cgi/tech/1242136180/698
から誘導されてきました。

ExcelからJavaで作ったフォームを表示したいのですが、
java.swing.JFrameで作ったフォームを起動後、閉じるとExcelが最前面にきません。
Excel上のボタンを押す
->Javaの画面が最前面に起動
->Javaを終了するとExcelが最前面に戻ってくる
としたいのですが、なぜかExcelの上にその下にあったエクスプローラー等が表示されます。
ソースは下記です。実物が見れないので、一部間違ってる可能性はあります。

Sub Test_OnClick()
 On Error Goto EEXIT
 Application.Interactive = False
 Set Shell = CreateObject("WScript.Shell")
 Shell.Run "java -jar jframe.jar", True, True
EEXIT:
 Application.Interactive = True
End Sub

Excel 2010, Windows7です。
java側の問題かもしれませんが、宜しくお願い致します。
118デフォルトの名無しさん:2013/11/30(土) 10:53:47.24
>>117
再現が面倒なので試さずに適当に答えるけど
プロセスが終了した時のウィンドウの順番をWindows任せにしないで、
Javaアプレット側のTerminateイベントでExcelのウィンドウをアクティブにしてから抜けるようにするか
VBAで自分自身を最前面にするか、どっちでも行けるんじゃないかと思う
AppActivate試してみ
119デフォルトの名無しさん:2013/11/30(土) 12:33:56.02
>>118
ありがとうございます。
試してみます。
120デフォルトの名無しさん:2013/12/03(火) 15:30:44.33
数万行×数百列の2次元配列arrで
arr("りんご","色")としたら、"りんご"行の"色"列の値が取り出せるようにしたいです。
Enumがそれっぽいですが、"りんご"や"色"の位置はあらかじめ決まってなくて
Enum宣言時に値を入力できません。どうすればいいですか。
121デフォルトの名無しさん:2013/12/03(火) 16:45:56.53
>>120
find or filter
122デフォルトの名無しさん:2013/12/03(火) 18:00:28.45
>>120
>>121
★3、★4に明確に違反しています。スレ違いです。
123デフォルトの名無しさん:2013/12/03(火) 21:27:43.18
>>122
必死だなw
124デフォルトの名無しさん:2013/12/03(火) 22:47:21.25
VSTOはどこで聞くのがいいんだろう
125デフォルトの名無しさん:2013/12/04(水) 05:41:42.67
それぞれの言語のスレか、VSスレかじゃないかね
126デフォルトの名無しさん:2013/12/04(水) 06:12:37.46
>>120
その2次元配列とやらのデータは元々シートに書かれてるの?
127デフォルトの名無しさん:2013/12/04(水) 10:05:10.57
白桃の臭い
128デフォルトの名無しさん:2013/12/04(水) 23:35:56.61
>>125
ありがとう。
129デフォルトの名無しさん:2013/12/07(土) 22:35:46.63
2つのブックを開いた状態で
BVAが記述されたていないの方のbook2のa1セルを参照するときに
ブックをアクティブにすればすぐ参照できますが
アクティブにしなくてもbook2のa1の数値を参照することはできるのでしょうか?

If Range(A1) < 0 Then 'A1をブック2のA1を参照させるには。。
Range(a2).Value = 0
End If
130デフォルトの名無しさん:2013/12/07(土) 23:07:01.61
>>129
yes
131デフォルトの名無しさん:2013/12/07(土) 23:24:16.83
>>129
オープンしておけばアクティブにしなくてもアクセスできる。
Workbooks("ブック名").Sheets("シート名").Range("A1").Value

Range(A1)というようにブック名、シート名を省略はできないけど。
ブック名、シート名を指定するのは面倒ということなら

With Workbooks("ブック名").Sheets("シート名")
  .Range("A1").Value
End With

のようにWithステートメントを使えばいい。
132デフォルトの名無しさん:2013/12/07(土) 23:29:02.79
>>120
2次元配列のデータ元がシートの場合
2次元配列の変数に格納する必要はなく、
arr("りんご","色")という指定できるプロシージャを作ればいい。

2次元配列のデータ元がシート以外の場合
2次元配列に格納されているデータをシートに書き出してから
arr("りんご","色")という指定できるプロシージャを作ればいい。
133デフォルトの名無しさん:2013/12/07(土) 23:34:03.24
>>122
> ★3、★4に明確に違反しています。スレ違いです。

ってかさ、明確に違反しているっていうのは一方的な見方でしかない。
作り方によっては★3、★4に全く違反しないように作れるわけだが。
134デフォルトの名無しさん:2013/12/07(土) 23:38:31.11
http://toro.2ch.net/test/read.cgi/tech/1382015080/96

> 演算子と言えばXor(排他的論理和)ってのがあって
> True Xor True = False
> True Xor False = True
> False Xor True = True
> False Xor False =False
> みたいにどちらか片方のみがTrueの場合にTureを、
> そうじゃない場合はFalseを返すんだけど、
> これの使い道って何か有る?

状態が変わったことを検出したい場合とか。
135デフォルトの名無しさん:2013/12/07(土) 23:55:38.78
>>130
>>131
ありがとうございました参照数百箇所参照させたら激しく点滅して時々謎のerrorが出て困っていましたが解決できそうです。
136デフォルトの名無しさん:2013/12/08(日) 09:38:27.18
>>134
★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で出来ることは全てスレ違いだと思ってください。
137デフォルトの名無しさん:2013/12/08(日) 09:40:52.10
>>133
違反の可能性があるってだけで違反のわけだが。ルールとはそういうもの。
従えないなら出て行ってもらうほかないわけだが。
138デフォルトの名無しさん:2013/12/08(日) 09:45:22.28
それは言えてるね。
保有の恐れがあるので大量虐殺したイラクの件もあるし。
有ろうが無かろうが「有るかもしれない」と言われた時点で犯罪が確定する。
警察に頼めば証拠はあとからいくらでも作れるし。
139デフォルトの名無しさん:2013/12/08(日) 11:14:22.32
全く違反しないように作れると言っているのに
「違反の可能性がある」で返すとかドンだけアスペなんだろうこの人

>>137「ルールとはそういうもの。(ドヤァ)」

言葉が通じないならこの世から出て行ってもらうほかないわけだが。
140デフォルトの名無しさん:2013/12/08(日) 11:20:17.94
vbaにも、vb.netでいうところの
DataTableがほしいな。
DBから値を取得するとき不便だわ
141デフォルトの名無しさん:2013/12/08(日) 11:47:25.77
>>140
そこでADOですよ
142デフォルトの名無しさん:2013/12/08(日) 17:12:27.36
OS Windows7 Excel2003です。

Sheet1の入力データをコピペマクロで
Sheet2に貼付けまでできています。
これを仮にマクロAの登録とします。

Sheet2に貼付け、調整したデータをそのまま
同じSheet2内でコピペしたいのですが、
マクロBとして登録しようとすると、マクロAが消えて
マクロBだけが残るのですが、マクロA、Bそれぞれ
別のマクロとして残すにはどうしたら良いのでしょう?

新しいマクロで登録すれば良さそうなのですが、
上手く行きません。何か記述が悪いのでしょうか?
143デフォルトの名無しさん:2013/12/08(日) 18:34:11.07
>>142
マクロA、マクロBはそれぞれどこに登録してるのかな?
Sheet1とかSheet2とか直接シートに登録している?
それともThisWorkbookとか標準モジュールに登録している?

そもそもマクロが消えるという状況がよくわからない。
考えられるのはマクロが登録されているシートを削除してるのかなと
思うんだけど。
144デフォルトの名無しさん:2013/12/08(日) 19:26:14.11
そもそもマクロAとかBとか、何をそう言ってるのか解らん
シート2内でコピペしたいのは、セルのデータなのかマクロなのか
そのコピペは手でやりたいのかマクロでやりたいのか
145デフォルトの名無しさん:2013/12/08(日) 19:37:09.92
>>143
マクロA、BともにSheet2に置いた
Wordアートに登録してあります。

マクロが消えるというか、macroに番号が振られるのですが、
一つ登録して次を登録すると前の番号で登録したはずのマクロが消えて
今、登録したマクロだけが残るような症状です。
146デフォルトの名無しさん:2013/12/08(日) 20:37:44.67
>>145
バージョンは違うWinXP + Excel2002の環境で試してみたけど、
こういうことなのかな?

マクロA、マクロBは標準モジュールに実装してあって
WordアートにマクロA、マクロBの二つをマクロ登録したいんだけど
Wordアートのマクロ登録は一つのマクロしか登録できない。

これならマクロCを新たに作ってマクロCからマクロAとマクロB
をコールすればできるような気がするけど。
147デフォルトの名無しさん:2013/12/08(日) 21:46:33.81
>>146
ちょっと試してみます。ありがとうございました。
148デフォルトの名無しさん:2013/12/09(月) 08:30:48.91
>>146
横だが、おっさんエスパー検定何級?惚れた
149デフォルトの名無しさん:2013/12/10(火) 00:35:03.48
シート内に配置したボタンを押すとVBAが動いて、
セルの計算結果を特定のセルに書きこむ処理をしてるんですが、
この時にVBAで書きこんだ内容をExcelにある元に戻すボタンで戻せるようにする方法ってありますか?

宜しくお願い致します。
150デフォルトの名無しさん:2013/12/10(火) 01:15:07.25
事前にコピーしておく処理を追加する
もとに戻すボタンと処理を追加する
マクロの処理中に段階的にコピーをすれば親切
ブックの終了時にコピーを破棄すること
151デフォルトの名無しさん:2013/12/10(火) 07:17:22.38
>>150
> もとに戻すボタンと処理を追加する

要件変えんなよ
152デフォルトの名無しさん:2013/12/10(火) 07:42:40.74
>>151
>要件変えんなよ

要件どおりの案を書けよ
153デフォルトの名無しさん:2013/12/10(火) 07:43:41.31
知らんけど、貼り付けみたいなものを実行したら戻る対象の処理として憶えていてくれていて、元に戻すで戻れたりしないかな、知らんけど
154デフォルトの名無しさん:2013/12/10(火) 14:06:31.70
>>152
指摘されて逆ギレ、カッコ悪 (w
155デフォルトの名無しさん:2013/12/10(火) 17:34:28.49
>>149
質問をするスレの選択を間違えたね、
出来るのに回答できる人間はいない。
156デフォルトの名無しさん:2013/12/10(火) 18:12:15.78
何その不自然なレス、かなり気持ち悪い
149と155が別人なら単に155が変人なだけだが
自演なら155の他に149までが変人なんだが
あ、結局のところ変人は一人だけかワラ
157デフォルトの名無しさん:2013/12/10(火) 18:14:50.24
>戻る対象の処理として憶えていてくれていて

覚えておく処理をいれておきゃ良い
158デフォルトの名無しさん:2013/12/10(火) 19:13:32.79
仕事でたまに作るけど、Undo処理ってのは思ってるよりずっと複雑で手間がかかる
作業フォルダを用意して、ボタンを押すごとにファイルを別名保存していくのが一番簡単
159デフォルトの名無しさん:2013/12/10(火) 19:53:31.30
>>149
ユーザー定義関数ならUndo可能だが書き込むセルを計算式にしとくのは無理か?
160デフォルトの名無しさん:2013/12/10(火) 20:34:52.05
>>159
難しそうです。
VBA内で他プログラムを参照して、そこからの回答をセルに書きこみたいのです。
セルに書きこんだ後は、ユーザーがそれを編集する想定です。
161デフォルトの名無しさん:2013/12/10(火) 21:07:11.17
他プログラムの参照はユーザー定義関数でも出来るでしょ
ボタンを押したらってタイミングは難しいけどね
ボタン押したらフラグ立ててシート再計算
関数はフラグ立ってたら他プログラムから値を取得して返す

実際やると大変だろうがこんな感じ
162デフォルトの名無しさん:2013/12/10(火) 22:51:56.50
>>161
うーん、処理のルーチンとしては以下のような感じなのです。
ユーザーがセルに値を入力する。
ボタンを押したら現在のセルの状態を取得してサーバー側のプログラムに渡す。
サーバー側は現在のサーバーの状況で渡された文字列を編集してテキストに吐き出す。
それをFTPでとって来てテキストを開いて中身の文字列でセルを上書きする。
ユーザーがさらにそれを編集した上でDBに保存するボタンを押す。
VBAでDBに保存。

関数をどこにおけるかが問題なのですが、
関数ってユーザーが編集する部分を書き変えたりってできますか?
163デフォルトの名無しさん:2013/12/10(火) 23:10:29.93
>>162
上書きする直前にコピーしておけばいいじゃん。
それをExcel標準のundoボタンに似せたボタンをすぐ横に生成して利用すればいいんじゃね。
それか、適当な理想論だけど、Excel標準のundoボタンでイベント作れるのなら、コピーしたのを先に挟み込めば。

関数は記述したセルでしか動かないよ
164デフォルトの名無しさん:2013/12/12(木) 10:51:13.33
Form上のコントロールを
標準モジュールのコードからいっぱい貼り付けたいのですが
それにはどうすればいいですか?

例えばある変数xの数だけ、LabelとTextのペアを位置を計算してUserformに貼り付けるといったことをしたいです。
165デフォルトの名無しさん:2013/12/12(木) 11:49:05.91
無理
166164:2013/12/12(木) 12:05:18.41
じゃあどうすればいいですか?
最大100組使用する可能性があれば100個とりあえず配置しておいて
コードで使うやつだけを表示させ残りは非表示にしないといけないですか?
167デフォルトの名無しさん:2013/12/12(木) 12:55:50.94
>>164
サンプル

Private Sub UserForm_Click()
  Dim Ctrl As Control
  For i = 1 To 5
    Set Ctrl = UserForm1.Controls.Add("Forms.TextBox.1", "テキストボックス_" & i)
    Ctrl.Top = i * 20
    Ctrl.Left = 20 + i * 8
    Ctrl.Width = 100
    Ctrl.Height = 18
    Ctrl.Value = "テスト " & i
  Next
End Sub
168デフォルトの名無しさん:2013/12/12(木) 14:13:18.74
>>167
ありがとうございます!

>>165
こら、>>167みろよ。
あなたはこのスレでの発言を1年間禁止。
169デフォルトの名無しさん:2013/12/13(金) 01:54:45.07
sub book1()
workbooks.open file name:=book1
worksheets(sheet1).copy
end sub
といれるとコピーするだけじゃなくて新しいブック作ってそれに貼るのですが、どうしたらそれを抑えることが出来ますか?
170デフォルトの名無しさん:2013/12/13(金) 02:25:35.60
>>169
今発見できたのですが、どういうわけか
worksheets(sheet1).cells.copy
だとうまくいきました。なぜ、これだとうまくいくのでしょう?
171デフォルトの名無しさん:2013/12/13(金) 03:47:05.07
>>169
ヘルプぐらい読め
>Worksheets.Copy メソッド
>引数 Before と引数 After の両方を省略した場合は、新規ブックが自動的に作成され、シートはそのブック内にコピーされます。
172デフォルトの名無しさん:2013/12/13(金) 04:37:01.18
>>171
すみません。いくらググっても出て来ませんでしたがヘルプに載っていたとは。役に立たないと思っていました。ありがとうございます。
cellsというのが引数になるのですね。sheet.activate
sheet.copy
ならコピーされるかと思っていました。
173デフォルトの名無しさん:2013/12/13(金) 11:01:43.70
>>172
cellsは引数じゃない
そもそもCells(が返すRange)のCopyとWorksheetsのCopyは別の命令
174デフォルトの名無しさん:2013/12/13(金) 17:33:05.46
>>173
どう違うのか教えていただけないでしょうか。
引数でないのですか。わからなくなってきました。

実際にやってみると前者が普通にコピーをし、後者は新規ブックを作ってしまうというのはわかるのですが、どうしてかは調べても見つからなかったのです
175デフォルトの名無しさん:2013/12/13(金) 17:39:04.38
>>174
なんでVBAの入門書読まないの?
176デフォルトの名無しさん:2013/12/13(金) 17:43:54.25
>>175
インターネットでいろいろ検索して入門書も読んでいるのですがこれをこうすると地がうことになるというような説明はされていなくて。
とにかくそういうものだと理解して使うのは出来るのですが気になって。
177デフォルトの名無しさん:2013/12/13(金) 18:23:45.10
コンピュータの原理からなにからぜーーんぶ判らないと使えない!キリッ
178デフォルトの名無しさん:2013/12/13(金) 18:51:13.05
少しは自分で勉強しろチンカス
179デフォルトの名無しさん:2013/12/13(金) 19:19:53.04
>>174
だからそもそも別の命令
前者のCopyがRangeのコピーする命令
後者のCopyがWorkSheetsのコピーする命令
違う命令なんだから違う結果になっても当たり前だろ
180デフォルトの名無しさん:2013/12/13(金) 21:21:12.26
>>176
君は「異なるオブジェクトの同名のメソッドは別のものだ」ということを
理解していない。(たぶん「どちらも同じ関数を呼ぶ」とでも思っているのだろう)
だから >>175 の突っ込みを入れられたのだ。
181デフォルトの名無しさん:2013/12/13(金) 21:28:45.32
それ以前にオブジェクトもメソッドも理解してないと思うがな
182デフォルトの名無しさん:2013/12/13(金) 21:38:01.35
>>179
>>180
>>181
ありがとうございました。
特に>>180のおっしゃる通りで、それについてはほとんど何も理解していませんでした。
183デフォルトの名無しさん:2013/12/14(土) 00:36:28.14
gooで質問したのですが回答が得られそうにないのでプログラム板に来たのですが
どこで質問すればいいのか分かりません。
Excelのアドイン 「XLL」 をC++で作成しようと思っているのですがセルに可変文字列を返すとき
普通はfreeとかdeleteとか使うのですが関数として戻り値を返す前にdeleteできないので
どうすればいいかと考えています。
184デフォルトの名無しさん:2013/12/14(土) 00:47:16.86
久しぶりに見るとリンクが簡単に張れないので難しいです。
忍者のレベルを上げるとか・・・。
面倒なので上記の質問を取り下げます。
ご迷惑をおかけしました。
185デフォルトの名無しさん:2013/12/14(土) 01:55:30.97
>>182
オブジェクトやクラスの型が違うと、
同じ関数名でも、動作が全然違う

例えば、車オブジェクトの走ると、
猫オブジェクトの走るは、全然違う

入門書を買って、読んだほうが速い
総合的・段階的に学べるし
Option Explicit

Sub test()
Dim book1 As Workbook
Dim str As String

Set book1 = Workbooks("b.xls")
str = book1.Worksheets("Sheet1").Range("a1:c1").Value

Range("a1:c1").Value = str

End Sub

2つのブックがありまして
ブックb.xls の a1:c1 に書かれている数値を
ブックa.xls の a1:c1 へコピペするコードを書いてますが、
上のコードですと Dim str As String の型がエラーを起こしますが
何という型にすればいいのでしょうか?(無提議で動いてますが)

また上記のコードをなるべく変数を使わずにもっと完結に記述することは可能でしょうか?
宜しくお願い致します。
187186:2013/12/14(土) 15:14:38.18
>>186
自己解決しました


Sub test()

Range("a1:c1").Value = Workbooks("b.xls").Worksheets("Sheet1").Range("a1:c1").Value

End Sub


こう書けば動きましたが
変数を割り当てる必要なんて微塵もないですね。w
参考にしたサイトが悪かったのか・・ なんで変数を使って解説してるのか謎です、、
188デフォルトの名無しさん:2013/12/14(土) 16:28:59.64
そのサイトが何をなぜ変数を使って説明してるのかしらんが
"変"数だからな
プログラム中で中身変えたり、使いまわしたりするのに都合がいいから使うんだよ
そう言った事が全くなければ変数なんていらんが、そう言うプログラムはあんまりない
189デフォルトの名無しさん:2013/12/14(土) 18:08:55.53
>>186,187
Range("a1:c1").Valueは配列。配列をString型に入れようとすればエラーだわな

セル範囲の値を変数に入れるには Dim str As Variant
コピーなら同じ範囲を指定して Sheets(X).Range("a1:c1").Value = str として
もよいが、それなら >> 187 で十分。
セル範囲をVariant変数に入れる本来の目的は str(1, 1) が a1 , str(1, 3) が
c1 の値 といった配列で扱えることにある。
そしてこれはExcelVBAでは非常に有効なテクニックでもある。
190デフォルトの名無しさん:2013/12/14(土) 18:21:29.08
配列にして操作するのは、高速化としては有効なテクニックではあるが
それを本来の目的って言うのは違うだろ
191デフォルトの名無しさん:2013/12/14(土) 18:43:33.71
配列がどのような仕様かを知りたいのですが
一番うまくまとまっている解説サイトはどこですか?
192186:2013/12/14(土) 19:29:03.71
>>189
>>188
ご丁寧な解説ありがとうございます。大変勉強になりました。

同じ処理を行や場所を変えて繰り返しやるときは変数を使うのが有効なようですね。
193デフォルトの名無しさん:2013/12/14(土) 22:11:17.25
VBA初心者ですが
Dim の変数提議の場所について教えてほしいのですが
IF 等条件によっては使わない場合がある変数は 
Elseなどの結果のコードの直前に書いても問題ないでしょうか? 
使わない変数もすべて先頭に並べておく必要があるのでしょうか?
194デフォルトの名無しさん:2013/12/14(土) 22:26:29.75
>>193
MSのガイドラインには、1行に1つずつとは書いてあるけど、宣言の位置については記述が見当たらない
こういうのは真面目に論ずると宗教戦争になるんで、その場ごとに先輩に合わせとけ
195デフォルトの名無しさん:2013/12/14(土) 22:31:27.06
俺は予言者

この話題は荒れる
196193:2013/12/14(土) 22:53:56.18
>>193
>>194
>>195
初心者的の素人考えかもしれませんが
既に複雑化しているコードの中に追加でIFやCaseで命令をお試しで付け足す場合に
先頭に書いてあると消すときに少し手間がかかったり
しばらく触ってなかったら何の提議か忘れてしまったりする場合もあるかと思うのですが
直前に書いておけば一目瞭然で消す時も簡単ですし処理的にもIFの結果を先読みしていなければ
読み込まれないのでごくわずかでしょうが処理が軽減されるのではないかと思いました。
197デフォルトの名無しさん:2013/12/14(土) 23:01:48.05
>>196
提議じゃなくて定義な

双方にメリットとデメリットがあって、優劣が決まらないから荒れるんだよ
初心者なら議論に参加して、そういうのを再確認するのは無駄ではないと思うけど、
このスレでは何度も同じ話題がループしてるんで、常連はもう飽き飽きしてる
198193:2013/12/14(土) 23:30:51.83
>>197
>定義  失礼しました。。

なにやら振れてはいけない話題であったようですね
今書いているVBAは仕事ではなく趣味の週末データー解析ですので
動作に問題がないようでしたら自分のやりやすいように書く事にします。
ありがとうございました。
199デフォルトの名無しさん:2013/12/14(土) 23:33:55.42
>>193
先頭で定義する「必要」はないよ。(宣言必須なら)その変数を使うまでに宣言すればいい
>>194
そのガイドラインってのが何を指してるか知らんが
すくなくともヘルプのDimステートテメントには
>プロシージャ内で Dim ステートメントを使用する場合は、通常、Dim ステートメントをプロシージャの最初で記述します。
と書いてあるわけだが
>>196
お前一人が見るプログラムならどこで定義してても良いよ
他人も見るプログラムなら、ルール決めてそれを守れば良い

おそらく定義だけの位置では処理速度は変わらん
プロシジャ単位で実行時にコンパイルするからな
New付きで定義したらどうなるかはしらん
200デフォルトの名無しさん:2013/12/14(土) 23:51:09.23
Excel 2010のVBAのヘルプで確認したら明記されてた
http://10up.20ch.net/s/10mai2010845.png
201デフォルトの名無しさん:2013/12/15(日) 01:56:07.75
通常か。そうじゃない場合はつまりは異常か?
基本的に、なら、例外的に、で返せるが。

なんて邪推か。とりあえず上に書いておくのが慣例よ。
各自都合のいいルールを模索しそれに従ってください。程度だろうね。

自動で半角スペースの処理が行われてしまうみたいに、
宣言句は関数の上の方に移動させられてしまうわけでもないし。
202デフォルトの名無しさん:2013/12/15(日) 01:56:59.76
>>183
シーぷらぷらスレでエクセルネタとしてレスするのが無難加藤
203デフォルトの名無しさん:2013/12/15(日) 01:57:31.30
シーインクリメント
204デフォルトの名無しさん:2013/12/15(日) 02:11:46.97
勝手に大文字になるのを止めるにはどうすればいいですか?
205デフォルトの名無しさん:2013/12/15(日) 02:43:02.74
>>204
何が?
forみたいなシステムに最初から入ってるキーワードがForになるのを防ぐ方法はないよ
206デフォルトの名無しさん:2013/12/15(日) 08:49:33.25
予約語という言葉も知らない人に教えてほしくないですぅ
207デフォルトの名無しさん:2013/12/15(日) 09:05:07.04
ですぅ
208デフォルトの名無しさん:2013/12/15(日) 10:09:18.12
予約語と言われて分かる人は >>204 みたいな質問しないですぅ
209デフォルトの名無しさん:2013/12/15(日) 15:47:09.25
Excel2003にて
VBEエディターで置換をするときに
改行を含まない1行のコードのみ置換できるようですが
複数行をまとめて置換する方法は無いのでしょうか?
210デフォルトの名無しさん:2013/12/15(日) 16:15:10.27
>>209
無理
211デフォルトの名無しさん:2013/12/15(日) 17:13:17.83
>>210
モジュールを30個ほど連結させたのですが
全モジュールの特定の箇所に数行コードを追加したいときに
複数行置換ができたら1発でできるのになあと思いましたが。
1モジュールだと他のエディターで置換して戻せばいいですが
モジュールが別れていて数が多いとひたすらコピペを正確に繰り返すしか手がないようで骨折れまくってます。
212デフォルトの名無しさん:2013/12/15(日) 18:23:31.03
全く同じ複数行ってならその部分をプロシジャ化して1行にしてから挿入…以外はないんじゃね
213デフォルトの名無しさん:2013/12/15(日) 19:13:37.07
テキストエディタにコピペして置換してからVBEにもう一度コピペ
っていうか、ある程度長いコードは最初から外部エディタ使うだろ
内蔵エディタは編集機能が貧弱すぎて話にならない
214デフォルトの名無しさん:2013/12/15(日) 19:34:13.78
>>211
>モジュールを30個ほど連結させたのですが
>1モジュールだと他のエディターで置換して戻せばいいですが

30モジュールを連結して1モジュールにしたのではなくて?
というか30回繰り返す程度ならたいした手間ではないような・・・
215デフォルトの名無しさん:2013/12/15(日) 22:35:19.55
>>214
三行目と四行目には空行があるよ。行間を嫁。

30Mod時なら1Mod丸々置換すればいいが、と言っている
216デフォルトの名無しさん:2013/12/15(日) 22:37:54.88
いや、
>モジュールが別れていて数が多いとひたすらコピペを正確に繰り返す

ここか。ここがbefore/afterをわからなくさせてるな。ごめん>>214
217デフォルトの名無しさん:2013/12/15(日) 22:40:25.31
>>212に1票。関数化しない、、できない理由があるのなら、将来を検討して類似する関数を複数定義でもして使い分ければいい。
218デフォルトの名無しさん:2013/12/15(日) 22:46:29.72
保守用に、VBE操作関数を用意してしまうのも手かもしれないな。セキュリティ警告の出るあいつ。
219デフォルトの名無しさん:2013/12/15(日) 22:48:22.39
作業用件は30個のモジュールに対する複数行置換か。
220デフォルトの名無しさん:2013/12/17(火) 22:45:22.58
日付で今日より1年前のデータで、最古のデータ行を拾いたいのです
WorksheetFunction.Matchで照合の型を-1で、降順に並び替えれば
うまくいきますが、データは昇順の状態で
一年前の最古のデータ行を拾う方法ありますか?
昇順のままで照合の型を-1だと当然失敗します
(最新のデータを拾ってしまいます)
いろいろ調べたのですが、いい方法がみつかりませんでした
どなたかいい方法ありませんか?
221デフォルトの名無しさん:2013/12/18(水) 07:31:12.64
>>220
一年前の最古って何?
仮に今日が2013/1/1なら一年前の最古って何年何月何日なの?
222デフォルトの名無しさん:2013/12/18(水) 14:19:06.90
Userformはいちいちunoadしたほうがいいですか?
けっこうたくさんのFormを使ってるんですが動きが遅くなるのを心配してるんですが。
223デフォルトの名無しさん:2013/12/18(水) 18:48:52.04
>>221
「一年前」の「最古のデータ」だろ
地で曲解するタイプか
224デフォルトの名無しさん:2013/12/18(水) 20:35:53.78
一年前に作成(変更)したシートの中で最後に変更されたセルのある行

と解釈したが。どうするかはわからぬ。
225デフォルトの名無しさん:2013/12/18(水) 22:59:15.70
>>220はマジで意味判んねっす
エスパー検定受けるつもりも無いんで、下手に日本語でアレコレ言うくらいなら具体的な例を上げて説明して欲しいっすな
226デフォルトの名無しさん:2013/12/18(水) 23:25:43.80
1年前で最古なんだから、今日が2013/1/1なら
データの何かの日付が2012/1/1のもののうち一番古いデータだろ、たぶん

まあまともなレス欲しいならそのデータのシート例だせと
227デフォルトの名無しさん:2013/12/19(木) 00:15:07.12
2年前の最新(最終)の1個上
228220:2013/12/19(木) 01:48:39.04
自己解決できました
最古って表現が適切でなかったですね
229デフォルトの名無しさん:2013/12/19(木) 07:38:05.88
>>228
いえいえ、私達の助言のおかげで解決できて良かったです
230デフォルトの名無しさん:2013/12/19(木) 08:25:55.40
EXCELのVBAで項目の管理方法について悩んでいます。

1.エンドユーザー向けに配布するEXCEL
2.項目(150位)を入力して、エラーをチェックして最終的にCSVを吐き出す
3.区分などはCombboxで実装(区分値の追加はたまに発生する)区分は30個ほど
4.入力した複数の条件でコード値を取得する処理あり
5.マルチランゲージ(ただし、日本と海外は別ブック)

項目(150位)のセル位置管理、エラー処理
区分値の管理はどうしたらいいと思いますか?

自分の知識で考えた結果は
項目の管理
 →TXTにパラメーターをもたせて、ブックを開いたタイミングでクラスオブジェクト(自作)
  に落として、collectionで管理する
区分の管理
 →Accessをローカル配置して、ブックを開いたタイミングで更新
231デフォルトの名無しさん:2013/12/19(木) 18:02:06.46
>>230
>項目(150位)のセル位置管理
決め打ち
セルに名前つけて名前で管理
セル位置と処理内容の対応シート作って管理
>エラー処理
好きなようにしろ
>区分値の管理
区分値用のシートに書いとく

俺ならEXCELで配布するならそのブックだけで完結するようにするが
区分の管理は一括なのかローカルなのかとか、色々考える事が多くて何とも言えん
まあ、好きなようにしろとしか
232デフォルトの名無しさん:2013/12/19(木) 18:24:22.86
アドインにしとけ
233デフォルトの名無しさん:2013/12/20(金) 16:12:59.17
大学生でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
234デフォルトの名無しさん:2013/12/20(金) 16:33:59.75
>>233
普通は、計算誤差というものに思いを馳せる
235デフォルトの名無しさん:2013/12/20(金) 16:39:27.59
>>234
レスありがとうございます
もしあなたが先生だったら回答はどちらにしますか?
236デフォルトの名無しさん:2013/12/20(金) 16:43:08.85
って先生に聞いたほうがいいのでは?
237デフォルトの名無しさん:2013/12/20(金) 16:48:03.00
>>285
1 / 3 * 3を計算して下さい。
238デフォルトの名無しさん:2013/12/20(金) 16:56:45.30
>>236
もう冬休み入っちゃって。
あーもう単位落としそうで心配だよお
239デフォルトの名無しさん:2013/12/20(金) 17:50:29.51
17歳@女子高生なら考えてやったのに
240デフォルトの名無しさん:2013/12/20(金) 18:07:18.65
最近OLちゃんが来なくて寂しいわ
241デフォルトの名無しさん:2013/12/20(金) 18:12:45.79
A3からA150(ぐらい:不定)に日付が1日1行の昇順であるんですけど、
その中から特定の日付を見つけたいんですが(実際は日付そのもの
ではなく、その日付のある行を知りたい)、Findの使い方を教えて
ください

Dim target As Range
Set target = Range("A3:A150").Find(What:="2012/3/01", LookIn:=xlValues, LookAt:=xlWhole)
MsgBox target.Row ←
とすると、実行時エラー:91
オブジェクト変数またはWithブロック変数が設定されていません
ってエラーが←のところで発生します。
242デフォルトの名無しさん:2013/12/20(金) 18:14:17.26
="2012/3/01"
="2012/3/1"
243241:2013/12/20(金) 18:20:00.05
え〜と、すいませんが変わらずです。
テスト用のシートではその日付はA80にあるんですがね
244デフォルトの名無しさん:2013/12/20(金) 18:24:49.95
VLOOKUP
245デフォルトの名無しさん:2013/12/20(金) 19:39:52.68
=#2012/03/01#
246241:2013/12/20(金) 19:50:43.16
日付を"#"で囲ったら行が取得出来ました。へぇ。
ありがとうございます >>245
247241:2013/12/20(金) 20:20:20.05
すいません、もう1つ追加で教えてください^^;。
日付を変数として先ほどのものに与えるのはどうするんでしょうか?
Dim dt as Date
として
dt = 日付
Set target = Range("A3:A150").Find(What:=#dt#, LookIn:=xlValues, LookAt:=xlWhole)
とすると構文エラーになるんですが。
248デフォルトの名無しさん:2013/12/20(金) 20:35:51.50
女子高生です高校でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
249デフォルトの名無しさん:2013/12/20(金) 20:57:48.50
>>247
「#〜# で囲む」 と「"〜" で囲む」 の意味の違いが判っていないからその質問になる。
250241:2013/12/20(金) 21:27:42.49
#〜#で囲むのを初めて知ったんですが、どう違うんですか?
251デフォルトの名無しさん:2013/12/20(金) 22:40:03.70
>>250
日付リテラル って書いても分からないと思うにで少し解説しておく
VB(A)では#で囲まれた日付と時刻は日付型(Date)の定数になる。("で囲めば文字リテラル・・文字型の定数)
よってWhat:=#3/1/2012# は日付型(Date)をWhatに指定していることになる。
これは
Dim dt As Date
dt = "2012/3/1"
・・・・・What:=dt,・・・・
と同じことになる

ちょっと書きすぎた。ついでに数値リテラルなども勉強しておくのが吉と思う
252デフォルトの名無しさん:2013/12/20(金) 22:55:40.45
>>251
あ〜、なるほど〜
その辺りは全然勉強してませんでした
ありがとうございますm(__)m
253デフォルトの名無しさん:2013/12/21(土) 12:12:08.22
マクロ処理にかなり時間がかかる(1分を超えることも)ので
なにに処理時間がかかってるかを調べたいのですが
どうするのが得策ですか?

なにが原因かがわかればあとはこちらでコードを改良します。
なので原因の調べ方。
254デフォルトの名無しさん:2013/12/21(土) 12:27:40.19
>>253
質問があまりにもざっくりしすぎ
原因も対処法もたくさんありすぎる

まず最初にマシンスペックを確認する
CPUの速度やメモリの量など
255デフォルトの名無しさん:2013/12/21(土) 12:35:51.56
何処の関数やプロシジャの部分が時間がかかっているのか
その前後に時間を表示するようにして見てみるとか

というか1分も我慢できないとかwだったらExcelでやるんでなく実行ファイル(exe)作ってそれでやるようにしたら?
256デフォルトの名無しさん:2013/12/21(土) 12:55:19.70
Debug.Print Time$
をあちこちに入れまくる
257デフォルトの名無しさん:2013/12/21(土) 14:12:00.66
Application.ScreenUpdating = False
Application.Calculation = xlManual
258デフォルトの名無しさん:2013/12/21(土) 14:13:25.50
断言する
アルゴリズムが悪い
質問のレベルから見てあきらか
259デフォルトの名無しさん:2013/12/21(土) 14:30:17.09
ニポンゴ
むずか死ね
260デフォルトの名無しさん:2013/12/21(土) 14:56:17.82
Excelにあるたくさんの表を
そのまま「せっせせっせ」とWordに貼り付けたいんですが
どういうコードを書けばいいですか?

Wordにはページの上から下へそのまんま東の順番で並べ、表と表の間は改行を1行だけ挿入します。
261デフォルトの名無しさん:2013/12/21(土) 16:46:02.95
http://20m.ziploader.net/dl.phpx?id=ziploader1929
★zipファイルの「阪神無」フォルダー以下
「平成25年10月」の数値未発表で一部合計値比較不可能の為
 平成25年9月〜平成13年4月は以下の各駅を合計・増減から除外して再計算。
 「阪神」─「本線」─「阪神梅田」〜「千船」
 「阪神」─「なんば線」─「大阪難波」〜「出来島」
★zipファイルの「阪神有」フォルダー以下
 除外せず、「平成25年10月」の未発表数値を前年同月(平成24年10月)と同一と仮定

※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月
※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。
※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。
※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。

平成24年4月〜平成25年10月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000020916.html
[2013年12月20日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000020/20916/6-2.xls

平成24年3月〜平成13年4月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000164566.html
[2013年6月4日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000164/164566/12-6.xls
262デフォルトの名無しさん:2013/12/21(土) 16:58:15.50
リストボックス enabled false にしても
スクロールも選択もできなくはなるけど
リストはグレーアウトしないの?

コンボボックスはグレーアウトするのに
263デフォルトの名無しさん:2013/12/21(土) 19:08:01.72
>>260
そういうコードを書けばいい
何がわからないんだ
264260:2013/12/21(土) 20:14:42.98
>>263
具体的には?
Selection.Copyまではわかるが、そのあとはこんな感じか?

Selection.Copy Destination:=Word.Documents(1).ActiveCursor
265デフォルトの名無しさん:2013/12/21(土) 21:18:08.98
>>264
多分ワードに直接貼り付けとか出来ないと思う
一旦クリップボード経由させるのが楽なんじゃね
266245:2013/12/22(日) 05:28:39.37
>>251
初心者に、型にかかわる説明してるのに、暗黙の変換つかうなよ
267デフォルトの名無しさん:2013/12/23(月) 01:32:23.38
すみません。質問ですが、
ユーザーフォームにコマンドボタンAとBがあって
Aをクリックするとデータの抽出
Bをクリックするとデータを抽出した後、特定のデータに色をつける
この場合、BにAと同じ構文を書いた後、色付けしてるのですが
省略ってできないでしょうか?
あまりに長くなるのでなんとかしたいです
268デフォルトの名無しさん:2013/12/23(月) 03:31:36.24
>>267
「Sub 抽出」を用意しといて、Aからは抽出を呼び出すだけ
Bは抽出を呼んだあと色付けするようにプログラムを作ればいい
269デフォルトの名無しさん:2013/12/23(月) 08:32:52.21
Private Sub btn_A_Click()
データの抽出
End Sub

Private Sub btn_B_Click()
データの抽出
データに色付け
End Sub

Sub データの抽出()

End Sub

Sub データに色付け()

End Sub
270デフォルトの名無しさん:2013/12/23(月) 10:39:37.72
思うにで少し解説しておく
271デフォルトの名無しさん:2013/12/23(月) 14:10:40.00
普通はチェックボックス使うよな
272デフォルトの名無しさん:2013/12/23(月) 16:33:14.05
>>268-269
ありがとうございました。
全体がすっきりしました。教えてくれた方、素敵です。
273デフォルトの名無しさん:2013/12/24(火) 12:07:04.76
初期状態のFormのプロパティ群をコードで設定することは可能ですか?
274デフォルトの名無しさん:2013/12/24(火) 12:08:07.16
FormのCommandButtonのCaptionの表示を左寄りにしたいんですが、どうやりますか?
いつも中央に寄っています。
275デフォルトの名無しさん:2013/12/24(火) 16:22:57.85
>>274
VBAのフォームのコマンドボタンではTextAlignプロパティが公開されていないので無理です
テキストの後ろにスペースを足して、左に寄っているように見せかけるか、ボタンの上にラベルを貼るか
最初からラベルだけにしてボタン的な使い方をするかしてください
276デフォルトの名無しさん:2013/12/24(火) 21:56:14.31
ボタン表面と同じ色の適当なサイズのBMP画像を作り、「Picture」プロパ
ティでボタンに貼る。

「PicturePosition」プロパティで、「fmPicturePositionLeftCenter」を
指定すれば、「Picture」プロパティで指定した画像の幅だけテキストが
右に寄り、「fmPicturePositionRightCenter」を指定すれば、左に寄る。

これなら1ドット単位で指定できるが...。
277デフォルトの名無しさん:2013/12/25(水) 16:13:28.24
MsgBox "部長!!!" & vbCrLf & "休みが欲しい!!!"
278デフォルトの名無しさん:2013/12/25(水) 16:14:03.22
課長に言え
279デフォルトの名無しさん:2013/12/25(水) 16:32:51.19
やすみくれ
280デフォルトの名無しさん:2013/12/25(水) 17:22:19.39
贅沢者。
残業200時間までは働けるぞ、仕事くれ。
281デフォルトの名無しさん:2013/12/25(水) 19:14:41.33
残業で200時間と言うことは
トータルで350時間くらいか。
働き者だなぁ。
282デフォルトの名無しさん:2013/12/26(木) 13:04:36.26
何日まで仕事?
283デフォルトの名無しさん:2013/12/26(木) 21:19:03.41
死ぬまで仕事
284デフォルトの名無しさん:2013/12/27(金) 12:51:03.64
納会開始
285デフォルトの名無しさん:2013/12/27(金) 12:59:16.93
仕事しながら年越し
286デフォルトの名無しさん:2013/12/29(日) 21:51:06.62
シートに自作関数を作るとき
なぜ標準モジュールに作らないとダメなんですか?
ThisWorkbookモジュールやSheet1モジュールじゃなぜ動かないんですか?
理由が知りたいです。
287デフォルトの名無しさん:2013/12/29(日) 21:59:39.81
>>286
>シートに自作関数を作るとき
どゆこと?
288デフォルトの名無しさん:2013/12/29(日) 22:06:15.50
ふつうのシート用に。
289デフォルトの名無しさん:2013/12/29(日) 22:16:09.85
質問です。
(1) 関数、IsNumberとIsNumericの違いはなんですか?
(2) それはどうやって調べましたか? (記憶してた人は回答しないでね)

(2)のほうがすごく知りたいです。なぜなら調べる方法がちゃんとわかっていればこのことに限らずこんご自分で解決できるから。
GoogleというのはできればNGでお願い。
290デフォルトの名無しさん:2013/12/29(日) 22:45:57.27
>>289
Yahooならいいんか?
291デフォルトの名無しさん:2013/12/29(日) 22:54:17.48
>>290
Ahoo
292デフォルトの名無しさん:2013/12/29(日) 22:57:57.90
>>289
VBAの組み込み関数かEXCELのワークシート関数かとか
型チェックするか暗黙の変換するとかしないとか

とりあえず両方のヘルプみれば済む話
293デフォルトの名無しさん:2013/12/29(日) 23:05:10.44
>>286
マイクロソフトがそう言う風にEXCELを作ったから
それ以上はマイクロソフトに聞かないとわかりません
294デフォルトの名無しさん:2013/12/29(日) 23:05:12.81
>>292
簡単にヘルプとおっしゃいますが
どうやってヘルプを起動するかとか
そのあとどうやって知りたい機能の関数を検索するかとか
そういうのが知りたいのですが
295デフォルトの名無しさん:2013/12/29(日) 23:06:26.77
>>293
マイクロソフトがどう言う風にEXCELを作ったかを調べるほうほうを聞いているのですが
296デフォルトの名無しさん:2013/12/29(日) 23:18:02.59
>>294
ヘルプだしたことないのかよ?
VBEのメニューにあるし、普通は知りたいところでF1押すだけだ
297デフォルトの名無しさん:2013/12/29(日) 23:19:47.85
>>295
それはマイクロソフトに聞いてください
298デフォルトの名無しさん:2013/12/30(月) 00:36:13.04
F1キーが付いて無いキーボードを使ってるんじゃね
つか簡単におっしゃいますがとか臭いな、行き遅れのキチガイババア的な臭いだ
299デフォルトの名無しさん:2013/12/30(月) 01:13:49.38
>>297
あなたはそれをマイクロソフトに聞いたのですか?
300デフォルトの名無しさん:2013/12/30(月) 04:23:14.97
ふつう直接聞かなくても、公式や非公式のドキュメント
第3者の解説等で十分じゃないですかね

必要があればマイクロソフトに問い合わせますがね
問い合わせが全部タダと言うわけでもないので
30118:2013/12/30(月) 09:37:31.59
パソコン教室とかにいった方いいレベル
302デフォルトの名無しさん:2013/12/30(月) 09:42:45.56
>>300
その公式や非公式のドキュメントは具体的になんなのか
PCのどこかにdocファイルとして存在してるのか
もしそうならそのPathはどこなのか
ヘルプ機能で見るものなのか
もしそうならその呼び出し方は
そういうのを質問者様は聞いてると思うぞ
抽象的なことではなくて
303デフォルトの名無しさん:2013/12/30(月) 10:44:40.44
DoEvents関数とAPIのSleep関数は、同じものと思ってさしつかえないでしょうか?
304デフォルトの名無しさん:2013/12/30(月) 11:40:58.82
フリーソフトをVBAで操作したいのですが
CreateObject("InternetExplorer.Application")やCreateObject("Outlook.Application")のように
そのソフトをオブジェクト変数として扱うにはどのような呪文を唱えればいいでしょうか?

そしてそのソフトの機能を呼びだすためどのようなメソッドがあるかを調べる方法は?
305デフォルトの名無しさん:2013/12/30(月) 11:45:39.16
>>303
差し支えるよ
全然違うから
306デフォルトの名無しさん:2013/12/30(月) 11:53:59.12
>>303
部屋に鍵をかけずに買い物に行くのがDoEvents
鍵をかけて眠るのがSleep
307デフォルトの名無しさん:2013/12/30(月) 13:28:00.33
>>304
そのフリーソフトがCreateObjectできるように作られてるソフトじゃないと無理
普通はまずそのフリーソフトの作者側で公開された情報がないか調べるんだがな
そう言う風に作られてるなら、メソッドの調べ方は参照設定してオブジェクトブラウザで見るとか
308303:2013/12/30(月) 13:30:08.67
>>306
じゃあ鍵をかけずに眠るのはどんなステートメント/関数?
309303:2013/12/30(月) 13:30:54.04
鍵をかけて買い物に行く場合も。
310デフォルトの名無しさん:2013/12/30(月) 13:31:16.47
>>306
その例えはおかしくないか

郵便物チェックするのがDoEvents
無視して寝るのがSleep

だろ
311デフォルトの名無しさん:2013/12/30(月) 13:34:05.56
帰ってくるまでに部屋をあらされるリスクを負う
312デフォルトの名無しさん:2013/12/30(月) 13:52:47.65
>>309
Sleepはそのまんまの意味
DoEventsはイベント処理中に後続のイベントを割り込ませるもの。
なのでスリープ同様CPU使用率を下げるが全くの別物。
というかDoEventsはそんな認識で使われるとバクの元だし必要とする時点で設計ミスの可能性が高いので忘れた方がいいよ。
313デフォルトの名無しさん:2013/12/30(月) 14:26:52.86
"後続のイベント処理"の中には画面更新も含まれるしフォームを閉じるといったものまで含まれるので
「DoEvents関数を抜けて戻ってきたら船が無くなってていきなり海中に叩き込まれた」みたいな
愉快な体験がいくらでもできるよ やったねたえちゃん!
314デフォルトの名無しさん:2013/12/30(月) 20:17:35.02
は?
Windowsに処理を明け渡すんじゃなくて?
315デフォルトの名無しさん:2013/12/30(月) 22:06:05.57
Windowsに処理を明け渡すというよりは、溜まってたWindowsからの処理要求を処理するって感じ
316デフォルトの名無しさん:2014/01/01(水) 11:16:42.52
イベントキューを片付けるだけだよ
ようするに仕事の順序が変わるだけ
317デフォルトの名無しさん:2014/01/01(水) 11:19:51.82
買い物に行くとか鍵かけるとか、別の作業増やしてどうすんだよ
やることは決まってんだよ

Sleepは溜まった仕事をそのままずっと先送りするだけ、DoEventsは順番が変わって急ぎの仕事を先にやるだけ
318デフォルトの名無しさん:2014/01/01(水) 14:23:24.77
ADOを使いたいのですが
会社のイントラWeb(?)から見れるデータベースを参照するためにすべきことはなんですか?
データベースにもURLとかサーバの名前みたいなのがあるんですよね?

どういうしくみか分かってないので、それも含めて質問できたらなと存じます。
319デフォルトの名無しさん:2014/01/01(水) 15:37:21.51
>>318
まず社内のシステム管理者に聞け
320318:2014/01/04(土) 09:54:05.01
>>319
教えてくれないんですよ。

空ファイルをつくり拡張子をudlにしてそれを開くと道は開けるみたいな情報を得ましたがそこから先がわかりません。
イントラWebのFormを使ってアクセスしてるDBをVBAで自由に扱うには
どうすればいいですか?
DBのサーバ名を調べればいいんですよね?
それはHTMLのソースのどこかに書いてるんでしょうか?
32118:2014/01/04(土) 10:56:13.66
>>320
> 教えてくれないんですよ。

やっちゃダメってことだろ。
322318:2014/01/04(土) 11:00:04.71
>>321
でもやりたいんですよ。
323デフォルトの名無しさん:2014/01/04(土) 11:26:36.29
データベースをいじることの危険性判ってんのかいな w
324デフォルトの名無しさん:2014/01/04(土) 11:32:17.50
>>320
DB ? サーバ ? クライアント
こういうふうになっていて
HTMLはサーバとクライアント間のやりとりに使われるものだから
DBのアドレスはHTMLのソースに書かれてないはずよ。

DBに接続するときふつうはDBのアドレスとユーザIDとパスワードが必要。
システム管理者からそれを教えてもらえないのであれば、
システム管理者と一緒にお酒飲みにいって酔わせて聞き出したり、
ノーパンしゃぶしゃぶに接待して聞き出すしか手はないと思うよ。
ノーパンしゃぶしゃぶがおすすめかな。しゃぶしゃぶできるし。
325318:2014/01/04(土) 11:55:05.29
>>323
なにが危険ですか?
データを更新しないかぎり大丈夫じゃんと思いますが。

>>324
IDパスワードはそのサイトのログインと同じもので良さそうな気がしてますが。
DBのアドレスかホスト名がHTMLに書かれてなければどこに書かれているの?
黒画面からnetstatみたいなコマンドはダメですか?
しゃぶしゃぶのことは分からんがポン酢だれじゃなきゃイヤだ。ゴマだれは不味い。
326デフォルトの名無しさん:2014/01/04(土) 12:02:56.72
「数値が文字列として保存されています」というコメントがある
数値らしきものが入っているセルについての質問です。

これはIsnumeric関数ではTrueを返すのはやめてほしいです。
これは文字列なんだから。

このような処理をする必要に駆られたとき
みんなはどうしてますか?
327326:2014/01/04(土) 12:05:05.32
だいたい数値をExcelが自動判別するというおせっかい機能が問題だ。
こんな機能は即廃止してほしい。
この機能を切る方法はない?

プログラミングでもvariant型みたいな中途半端な道具は即刻廃止してほしい。
数値らしきものも+や*で計算したら数値扱い、&や文字列とくっつける演算をしたら文字列扱いという機能もうざすぎる。
この機能も切る方法はない?
328デフォルトの名無しさん:2014/01/04(土) 12:07:02.81
' (アポー)が先頭に挿入された数字もこれは文字列なんだから
文字列と判断させる方法はない?
これもIsnumeric関数ではTrueと返しくさる。
32918:2014/01/04(土) 12:16:11.12
>>324
> ノーパンしゃぶしゃぶがおすすめかな。

いまでも、あるんか?
33018:2014/01/04(土) 12:21:05.25
>>326
おまえの嫌いな Variant に受けて、VarType( ) か TypeName( )
331デフォルトの名無しさん:2014/01/04(土) 12:23:36.78
>>325
まともな管理者ならDBの接続IDとサイトのログインIDを同じにするとは思えない。
>>325にDBの情報を教えなかったのならまともな管理者。ゆえにDBのIDとログインのIDは違うもの。
DBの接続に必要な情報はDBにアクセスするサーバ側のプログラムのソースコードに書かれているか、
またはサーバ側のプログラムから参照されてるはずよ。netstatで見えるのはサーバの状態。
DB <-> サーバ <-> クライアント
という形になるんでクライアントがやりとりするのはサーバ。
サーバの向こう側にあるDBはクライアントから見えない。
332デフォルトの名無しさん:2014/01/04(土) 12:42:08.74
867 名前:325 :2015/01/05(月) 13:46:36.00
年末のバッチ処理が管理外のセッションのロックでこけて大混乱になってクビにされた!!!
おまえらのせいだ!!! ぜったいにゆるさんぞ!!!!
333デフォルトの名無しさん:2014/01/04(土) 15:04:35.09
>>332
2015年の1月まで、一年間何もしなかった怠慢の結果だろ、クビになって当然。
未来が予想できるなら、対策しろ。
334デフォルトの名無しさん:2014/01/04(土) 15:10:01.15
>>332
「こけて」ってなに?
こういうまぎらわしい言葉の使い方はやめなさい。

[正しい使い方] (マラソンで)コケちゃいました。
335デフォルトの名無しさん:2014/01/04(土) 15:29:14.77
>>334
別に紛らわしくはないよね。揚げ足どりやめようよ。
336デフォルトの名無しさん:2014/01/04(土) 15:53:45.27
>>335
これが正しい用法だ。
http://www.youtube.com/watch?v=z8PbFRV287c
337デフォルトの名無しさん:2014/01/04(土) 16:12:51.03
正しい用法についてはもよりの日本語学校の先生にご相談ください
338デフォルトの名無しさん:2014/01/04(土) 16:53:32.53
プログラミング言語扱ってると自然言語にも厳しくなってしまうので気を付けないとね
339デフォルトの名無しさん:2014/01/04(土) 20:24:00.49
ここで諸君らに正月休みの宿題を出そう。
次の関数を作ってくれ。

・引数は3つ。すべてInteger。仮にx, y, zとする。

・戻り値は配列形式で、整数xから整数yまでの範囲の中の重複しないz個の乱数。
例えばx=10, y=20, z=5なら、返り値は11, 12, 16, 18, 20みたいな感じ。
不可能なx, y, zの組み合わせ(例えばx=10, y=12, z=5)なら返り値なしでMsgBox "アホ"でいい。

さあ時間だ。答えを聞こうる
340デフォルトの名無しさん:2014/01/04(土) 20:26:43.66
>>339
アホ
学校の宿題は自分でやれ
341339:2014/01/04(土) 20:29:53.75
>>340
アホ。
宿題ではない。
このスレの住人のスキルをためしているんだ。
2分でレスがきたから2分で回答できたのかなと思ったら
アホとはなんだアホ。
342デフォルトの名無しさん:2014/01/05(日) 01:33:49.04
>>339
へい
friendpaste.com/ZYnwC5HKmO7uUdrIygMUr
343デフォルトの名無しさん:2014/01/05(日) 03:37:54.01
>>339
へい
>>1★1〜1★4
344デフォルトの名無しさん:2014/01/05(日) 09:56:45.34
エラーを人間に返してどうする
仕様がアホ
345デフォルトの名無しさん:2014/01/05(日) 12:20:51.84
>>339の回答を知りたいんだけど
z個の乱数をx〜yの範囲で発生させ
それらが同一のものが1つもないかどうか調べて (←このアルゴリズムも簡単ではないが)
なければそれで終了、あればまた最初からやりなおし、
という方法はどう?
もっといい方法ある?
346デフォルトの名無しさん:2014/01/05(日) 12:23:53.87
アホという人のほうがアホだと死んだばあちゃんが言っていました
347デフォルトの名無しさん:2014/01/05(日) 13:07:00.55
>>345
Excelと何の関係がある質問なのかが俺にはわからん
348デフォルトの名無しさん:2014/01/05(日) 13:16:30.45
というかその程度で簡単でないとか
349デフォルトの名無しさん:2014/01/05(日) 20:43:08.46
この前スレで話題になった
コードからFormのコントロールを貼り付けたときに
そのコントロールに対してのイベントプロシージャってどこに書けばいいのですか?
例えばコマンドボタンをx個(コードの時点では数は不特定)貼り付けたとき各ボタンを押したときの処理を書きたいとき。
350デフォルトの名無しさん:2014/01/05(日) 23:16:12.60
>>349
別に決まりはないんじゃないかな
351349:2014/01/05(日) 23:23:09.77
じゃどこに書けばいいのかな?
そのオブジェクト名もまだ決まってないのよ
352デフォルトの名無しさん:2014/01/06(月) 00:31:50.25
前スレのどこ?
353デフォルトの名無しさん:2014/01/06(月) 09:21:30.74
>>351
クラスモジュールに書けばいいんじゃね?
354349:2014/01/06(月) 10:49:35.66
>>353
具体的にはどうすればいいですか?
クラスというのは設計図と聞くけど
それをつかってコントロールを生成するには
どんな呪文をとなえればいいのでしょう?
355349:2014/01/06(月) 10:50:52.64
あとクラスなんて使ったことないのですが
どんな書き方をすればいいですか?
単にコントロールボタンを置いてそれに1-2行の処理コードを書くだけのシンプルなものでいいのですが。
356デフォルトの名無しさん:2014/01/06(月) 11:12:25.62
シートのコピーごときで時間がかかってるのですが、これはなにが原因として考えられますか?
同じシートを10枚くらいとなりにコピーしてるだけなのですが。
357デフォルトの名無しさん:2014/01/06(月) 12:00:36.77
だからそういう時はその部分のコード晒せよ
358356:2014/01/06(月) 12:12:32.18
>>357
Sub セシウムさん()
Dim i as Integer
For i=1 to 10
Sheets("ひみつのあっこちゃん.xls").Copy After:=Sheets(Sheets.Count)
Next i
End Sub
359デフォルトの名無しさん:2014/01/06(月) 12:45:47.60
>>354-355
そんなのはここで質問するよりググればいいよ
360デフォルトの名無しさん:2014/01/06(月) 23:26:08.03
>>358
ワークシート名がファイル名と一緒なん?
まぁほんとにそのコードで動いてるんなら、単にコピー元のシートが大きいだけじゃね。
どうしようもないなら描画抑制すれば?
361デフォルトの名無しさん:2014/01/07(火) 02:22:41.82
どのくらいの時間がかかってるのか知らんが
セルに外部参照とかあって再計算が遅いだけじゃないのか
それか単純に使ってるマシンが貧弱か
362デフォルトの名無しさん:2014/01/07(火) 10:00:26.33
クラスモジュールのメソッドを呼ぼうとすると、
インデックスが有効範囲にありませんとエラーになります。
メソッド名も間違ってないし、メソッドはPublicにしてるし、他に何の原因が考えられますか?
363デフォルトの名無しさん:2014/01/07(火) 12:10:13.78
>>362
シート名が間違ってる
ワークシートじゃなかった場合、コレクションを片っ端からチェック
364デフォルトの名無しさん:2014/01/07(火) 12:59:21.42
>>362
そういう時は現象が発生する最低限のコードで試すんだ
本当に呼んでるメソッドに問題がないなら、引数に問題があるんじゃね
365デフォルトの名無しさん:2014/01/07(火) 13:22:03.22
>>362
エラーメッセージは読まない主義?
366デフォルトの名無しさん:2014/01/07(火) 14:32:56.47
>>365
今までに見たエラーは忘れる主義?
覚えてたら「インデックスが有効範囲にありません」は正式なエラーメッセージだってわかるじゃん?
http://www.07ch.net/up2/src/lena10519.png
367デフォルトの名無しさん:2014/01/07(火) 14:59:55.51
VBAのアルゴリズムで
重複しない整数の乱数をx〜yの範囲でz個出力するにはどうすればいいですか?
368デフォルトの名無しさん:2014/01/07(火) 15:03:59.54
配列で要素数が決まってないものを使うときのルールを教えてくださいますか?

Variantで
Dim a as Variant
Dim a() as Variant
に違うはありますか?

Dim b() as String
の場合、b(1)=・・・、b(2)=・・・と代入しようとするとエラーがでてエラいこっちゃとなります(いま話題の「インデックスが有効範囲にありません」のエラー)。
それなら動的配列の意味ないじゃん?と思いますが。
369デフォルトの名無しさん:2014/01/07(火) 15:10:39.77
VBAのクラスモジュールの存在意義を教えてください。
これはどのVBAの本を読んでも載っていないんですよね。
他の言語では使われてるらしいけど(ちなみにわたしは他言語は全く知りません)。
370デフォルトの名無しさん:2014/01/07(火) 16:07:00.18
>>367
年末〜年始の授業が乱数、教師はここを含めて見てる
ここで教えてもらったの提出しても点数貰えないよ
2012年にも、ネットで得たのを、そのまま提出した生徒がいた
371367:2014/01/07(火) 16:09:30.50
>>370
そんなこと言わず早く教えてくれよ。
あしたがしめきりなんだよ!
先生はこんなところ見るような人じゃないんで大丈夫だよ。
372デフォルトの名無しさん:2014/01/07(火) 16:29:51.49
>>368
>>369
さすがにggrks
373368:2014/01/07(火) 18:04:42.24
>>372
そんなのイヤなこった、パンナコッタ。
374デフォルトの名無しさん:2014/01/07(火) 18:11:17.83
>>367 これでいい?
Dim ran() As Integer: Dim x As Integer: Dim y As Integer: Dim z As Integer
Dim n1 As Integer: Dim n2 As Integer: Dim m As Integer: Dim ck As Boolean
x = InputBox("x"): y = InputBox("y"): z = InputBox("z")
ReDim ran(y - x)
For n1 = 0 To z - 1
ck = False
m = Int(Rnd * (y - x + 1))
For n2 = m To y - x
If ran(n2) = 0 Then
ran(n2) = 1
ck = True
Exit For
End If
Next n2
If ck = False Then
For n2 = 0 To m - 1
If ran(n2) = 0 Then
ran(n2) = 1
ck = True
Exit For
End If
Next n2
End If
Next n1
Dim str As String
For n1 = 0 To y - x
If ran(n1) = 1 Then
str = str + CStr(n1 + x) + ","
End If
Next
MsgBox str
375367:2014/01/07(火) 18:22:42.41
>>374
ありがとう。
ちょっと動作確認してみます。

あとx〜yの範囲よりzの個数が大きいときに「アホ」と出ずにすべての範囲の数字が表示されるというバグがあるぞ。
376デフォルトの名無しさん:2014/01/07(火) 18:47:58.46
>>367
この手法での回答は自分で考えてないと、先公にチクッとく
377デフォルトの名無しさん:2014/01/07(火) 19:00:29.61
>>375
簡単なことは自分でやってくれ。
あと19行目のck = Trueは余分だった、消してくれ。
378デフォルトの名無しさん:2014/01/07(火) 19:10:24.76
>>6
出番だぞ
379デフォルトの名無しさん:2014/01/07(火) 20:30:12.18
未だに悔しがってるの?
380デフォルトの名無しさん:2014/01/07(火) 20:59:23.37
>>1★5は解禁?
381デフォルトの名無しさん:2014/01/07(火) 21:24:14.13
ここで駄々こねて駄目って言ったらみんな次スレに行っちゃうから
泣き寝入りだろうな
382デフォルトの名無しさん:2014/01/07(火) 22:20:52.87
>>376
誰の何の先生なんだろう・・・かかりつけのお医者さんとか?おだいじにどうぞ
383デフォルトの名無しさん:2014/01/08(水) 20:42:14.12
フォーム利用してるとき、フォーム用のモジュールにUnload Meみたいに"Me"は使えますが
標準モジュールの宣言部分の変数を扱いときは、Me.iTestValueみたいに"Me"は使えないのはなぜですか?
384デフォルトの名無しさん:2014/01/08(水) 20:50:31.13
>>383
そのMeは何を指してるのか考えてみれば?

とは言えVBAではインスタンスって概念が解りにくいからなぁ
標準モジュールはインスタンス作成されないからインスタンスをあらわすMeは使えません
385デフォルトの名無しさん:2014/01/08(水) 21:03:54.67
>>384
なるほど、さっぱりわかりませんがありがとうございます。
インスタンスならMeが使えるということですか。
386デフォルトの名無しさん:2014/01/08(水) 21:05:24.61
フォーム用のモジュールの宣言部に
Public iTest as Integer
とし、貼り付けたボタン押せばiTest=iTest+1としてるんですが
標準モジュールで書くiTestは別人となってるようなんです。
これはどういうことでしょうか?
387デフォルトの名無しさん:2014/01/08(水) 21:15:33.34
>>386
フォームと標準モジュールでそれぞれiTestを宣言したのか?
そりゃ宣言が二つあるんだからiTestは二つ(以上)あるだろ
388デフォルトの名無しさん:2014/01/08(水) 21:17:12.77
>>386
>標準モジュールで書くiTestは別人となってるようなんです。
これはどういうことでしょうか?
つまり、もっと詳しく。標準でDIMとかした人?

あと、ここは学校じゃないので、、、
たぶん今の君の疑問の殆どはインターネットを探せばいくらでも出てくると思うよ
389386:2014/01/08(水) 21:25:42.19
>>387
いえ、フォームモジュールだけでiTestを宣言したんですよ
390デフォルトの名無しさん:2014/01/08(水) 21:26:13.56
標準モジュールで書くiTestは = 標準モジュールで使うiTestは
391デフォルトの名無しさん:2014/01/08(水) 21:26:43.80
別人 = 別物
392デフォルトの名無しさん:2014/01/08(水) 21:29:48.75
>>389
Option Explicitつけてるか?
つけないで標準モジュールで使ったiTestは、標準モジュールで宣言が省略されてるとみなされてる
393デフォルトの名無しさん:2014/01/08(水) 21:32:05.40
Option Explicitつけてないよ
394デフォルトの名無しさん:2014/01/08(水) 21:33:40.51
でもフォームモジュールでもPUBLICで宣言してるから
標準モジュールで使えないとおかしくないか?
395デフォルトの名無しさん:2014/01/08(水) 21:57:07.64
>>394
違うところで宣言されてる変数を使いたければ、どこの変数かも指定しないとダメ
標準モジュールで宣言されてるなら標準モジュールの名前
クラスやユーザフォームで宣言されてる変数なら、そのインスタンスへの参照
を変数の前に指定して.でつなぐ

インスタンスを意識しなくて標準モジュールで使うなら、たとえば
UserForm1.iTest = 0
みたいな感じ
396デフォルトの名無しさん:2014/01/08(水) 22:21:49.80
>>395
そうだったのですか!
ご丁寧な解説ありがとうございます。
各モジュールの中ではいいけどそうでなければ[モジュル名]と.でつなげばいいんですね。

ところで「インスタンスを意識しなくて標準モジュールで使う」の意味がさっぱりわからないけど
なんかこの概念はすごく重要そうな気がするんですが
どういうことなのでしょうか?
VBAでは完全にはオブジェクト指向でないから標準モジュールはもともとインスタンス(??)という意味でしょうか?
397デフォルトの名無しさん:2014/01/09(木) 00:51:11.25
>>396
標準モジュールはもともとインスタンス作成したりしない
インスタンスなしで実行できる

クラスは、使うためには自分でインスタンスを作成してそのインスタンスを使う

ユーザフォームはクラスの一種なんで、使うにはホントは自分でインスタンス作成しないとダメなんだが
いろんなしがらみによって自分で作成なくてもインスタンス(とそれへの参照)が用意されている
それが>>395のUserForm1見たいにユーザフォーム名で使えるやつ
これは実はUserForm1というフォーム(の定義、型)じゃなくて、暗黙のうちに作成されたUserForm1のインスタンスへの参照

標準モジュールはもともとインスタンス じゃなくて フォームは勝手にインスタンスが作られてる
が正解
398396:2014/01/09(木) 01:16:40.59
>>397
なるほどぉ。
・・・というのはウソで、さっぱり分かりませんわ。
勉強して出直してきます。
399デフォルトの名無しさん:2014/01/10(金) 19:26:18.39
セルとセルの値をIFを使って比較するとき、大文字と小文字の区別はどうなるか知ってます?
たぶんほとんどの人が知らないでしょう。

普通の関数(VBAじゃない)では、大文字と小文字は区別しないのに
VBAの比較では、大文字と小文字は区別するんですよ。

これ、それぞれで別の方法で比較するにはどうすればいいですか?
400399:2014/01/10(金) 19:29:17.35
最後の日本語おわかりかな?
VBAで大文字と小文字を区別しない方法って普通はどうしてますか?ということです。

例えば、
If a = a.Offset(0, 1) Then
a.Offset(0, 2) = "O"
Else
a.Offset(0, 2) = "X"
End If
とすると、"ABC"と"aBc"を比べたとき別モノと判断するんですよ。
401399:2014/01/10(金) 19:31:27.34
まっさきに思いつくのは
・関数で全部大文字にしてから比較
という方法だけど、もっと手軽な方法があるかと思って。
402デフォルトの名無しさん:2014/01/10(金) 19:42:47.15
正規表現
403399:2014/01/10(金) 19:47:23.74
とは何ですか?
404デフォルトの名無しさん:2014/01/10(金) 19:56:04.73
option にありそうじゃね
VBEで適当なところにoptionと入力してカーソル合わせてF1キー押して調べて教えて
405デフォルトの名無しさん:2014/01/10(金) 20:19:55.33
StrComp
406デフォルトの名無しさん:2014/01/10(金) 20:46:23.15
>>399
> たぶんほとんどの人が知らないでしょう。
いや、使ってみればわかるんだから、普通知ってるって

> 普通の関数(VBAじゃない)では、大文字と小文字は区別しないのに
まず「ワークシート関数」という名称を覚えましょう
そして大小文字を区別しないのは、ワークシート関数の仕様ではなく、ワークシート上での比較演算の仕様ね
つまり「=("ABC"="abc")」が、Trueを返すかFalseを返すかという問題


> これ、それぞれで別の方法で比較するにはどうすればいいですか?
ワークシート上の数式で大小文字を区別するならEXACT関数
VBAで大小文字を区別しないならOption Compare TextやStrCompや正規表現のIgnoreCase
407デフォルトの名無しさん:2014/01/10(金) 20:53:34.65
正規表現とは自分のちんちんを露出して性の自由を表現することでしょうか?
408デフォルトの名無しさん:2014/01/10(金) 21:29:56.07
正規と性器を区別できないのかよw


とか、ネタにマジレスするフリしてみるテスト
409407:2014/01/10(金) 21:43:59.76
これで釣れた(ワラ
410デフォルトの名無しさん:2014/01/10(金) 21:49:15.86
男性においては勃起具合
女性においては塗れ具合
これが正規表現です
勘違いしがちですが露出は関係ありません
411デフォルトの名無しさん:2014/01/10(金) 21:53:33.60
>>409
携帯で見てて、3段改行の下に書かれてることに気付いてないとか?
412デフォルトの名無しさん:2014/01/10(金) 22:00:57.26
そのりくつはおかしい
413デフォルトの名無しさん:2014/01/10(金) 23:48:36.66
もう一度確認したいのですが
・Sleep関数
・DoEvents
の違いはなんでしょう?

OSに制御を渡すことと関係あるそうですが
そもそもOSのしくみとは?
OSはいろんなプログラムを順番に高速で実行させることによって見かけのマルチタスクを実現しているんですよね?
414デフォルトの名無しさん:2014/01/11(土) 00:01:47.75
CPUがシングルコアシングルスレッドだった時代よりはOSは進化してると思う
415デフォルトの名無しさん:2014/01/11(土) 00:14:16.33
違いってその言葉通り、休むとイベントを実行する
416デフォルトの名無しさん:2014/01/11(土) 00:34:54.62
>>415
あなたは(1)教えるのが下手か(2)いじわるの人
こんど発言するときは名前欄に(1)か(2)のご記入をお願い。

質問を変えよう。
どういうときにSleepを使って、どういうときにDoEventsを使いますか?
417デフォルトの名無しさん:2014/01/11(土) 00:36:30.34
こういう人には答えたくないわー
418デフォルトの名無しさん:2014/01/11(土) 01:25:05.91
FAQレベルのことを教わるのに上から目線の男の人って
419デフォルトの名無しさん:2014/01/11(土) 02:30:45.99
聞き逃げしといて回答を得られるなんて思わない方がいいよ
あいつなら回答しそうだけど最近来ないしね
420デフォルトの名無しさん:2014/01/11(土) 04:00:34.13
>>416
横からごめんね、最近低レベルな質問してる人だよね
名前欄に低能とか初級とか、程度がわかる名前を入れておいてくれよ
421デフォルトの名無しさん:2014/01/11(土) 04:44:36.37
あまりよく知らないけど、
Sleepは、自主的にCPUの実行権を放棄して、
他のプロセスに、CPUのタイムスライスを与える

DoEventsはイベントキューから、
イベントをとって処理する?
422デフォルトの名無しさん:2014/01/11(土) 07:17:37.53
>>416
いちおうマジレスしとくけど
Sleep使うとき
 スレッドをしばらく停止しておきたいとき
DoEvents使うとき
 溜まってるメッセージキューを処理したいとき

まあ出来れば二度と来ないでください
423低脳:2014/01/11(土) 11:19:55.48
>>422
そのスレッドとかメッセージキューとは、どういう概念ですか?
424デフォルトの名無しさん:2014/01/11(土) 12:08:58.66
それはもうVBAじゃ無いからスレチになるのと多分理解出来ないよ
スレッドはプロセス内部で実行単位をさらに分割したもの
VBAなら1プロセス1スレッド
1CPUが割り当てられ4コアなら25%の力を引き出せる
他言語で1プロセスnスレッドが可能なものもある
やはり1スレッドに1CPUの割り当てとなるが4スレッド使えば4コアを100%使い切れる

メッセージはWindowsのGUIの仕組み
キーボード、マウスクリックその他イベントのトリガーは全てGUI部品に対するメッセージで実現されている
めんどくさいやめた
425デフォルトの名無しさん:2014/01/11(土) 12:50:23.25
Sleepはマルチスレッドを活用して処理を構築するときに必要。中級者でもほとんど未達。学ぶ気があるならそこからぐぐれ

DoEventsはユーザーの入力待ちに使う。他のアプリと連携するときに使うこともある
ある意味、関数内で隠しのアプリケーションを一つ立ち上げるのに近いので
使い方よりも内部を理解して注意点を把握することが大事
キーワードはイベントループ、メッセージポンプ、メッセージループ(呼び方はいろいろ)

もっと簡単に言うと学ぶ気のない奴は去れ
426デフォルトの名無しさん:2014/01/11(土) 12:58:28.43
どうせまた涼しい顔して低レベルなググれば済む話で質問してくるぞアイツは

低能で厚顔無恥はスルーだろjk
427デフォルトの名無しさん:2014/01/11(土) 13:14:53.49
>>426
お前はググらなければわからないってだけじゃ・・・
428デフォルトの名無しさん:2014/01/11(土) 15:15:33.46
オブジェクト変数で別ブックのセルを代入しておいたあと
その別ブックを閉じるとその変数を参照できません。

これを防ぐにはどうすればいいのでしょうか?
429デフォルトの名無しさん:2014/01/11(土) 15:39:13.08
>>428
オブジェクトの場合はセルの場所が記憶されるだけなのでブックを閉じるとセルの中身は見えなくなる
オブジェクトじゃない変数にセルの中身(値)を記憶しておけばいい
430デフォルトの名無しさん:2014/01/11(土) 20:10:43.64
自作関数で、帰り値が2つあるものを設計中ですが
その方法とは?
431デフォルトの名無しさん:2014/01/11(土) 20:12:55.39
>>430
設計書見せて
432デフォルトの名無しさん:2014/01/11(土) 20:43:43.23
複数の戻り値が欲しければ、普通に参照渡しで値が戻ってくるようにするとか
構造体やクラスのように複数の子要素をもつ型を返すようにするのが基本じゃね?

まぁ他にも配列や連想配列を返すとか、グローバル変数を介するとか
いくらでも方法はあるけどね
433デフォルトの名無しさん:2014/01/11(土) 22:05:29.03
存在しない数値のみを抽出する方法?

1〜10の縦並びの表で、調査結果が飛び飛びに得られ、
データが得られなかった番号のみを抽出してそれのみの
新たな表を作成するVBAプログラムを作りたいのですが、

表番号 調査項目
1  xx
2  xx
3  xx
4  xx


10  xx
  
2,3,5,7,10 の調査結果が得られ調査結果が得られた順に結果のみの新たな表が別のブックに作成される.

最初の表から未調査の1,4,6,8,9のみの表を作成しそれを元に再調査と言った流れです。

仮に10としてありますが実際の表は1000以上あり手で消すのは現実的ではありません
除外する方法を色々考えましたがすぐ出来そうで簡単にはできないようで行き詰まりました。
宜しくお願い致します。
434デフォルトの名無しさん:2014/01/11(土) 22:10:53.29
>>433
調査結果が得られたかどうかはどうやって判断するんだ?

つか、VBA使わんでも、その条件でフィルタかければ良いだけな気はするがな
435デフォルトの名無しさん:2014/01/11(土) 22:19:02.70
>>430
複数の戻り値っていうのが同じ方(例えば二つの数値とかだったら、
数値型の配列を返すとか。
436433:2014/01/11(土) 22:19:05.56
>>434
結果が得られた順に別ブックへ結果を記載して保存される仕組みになっています。

(調査結果(別ブック))
表番号 調査項目 調査結果 
2 xx false xx
3 xx true xx
7 xx true xx
5 xx true xx
10 xx false xx

何気にこの状態から表番号を1〜10に補って並べ替えるのも方法が思いつきません、、
逆に1〜10から上の数値を間引く方法もわからない感じです、、
437ピラフ:2014/01/11(土) 22:25:15.62
          ____
        /      \
       /  ─    ─\
     /    (●) (●) \
     |       (__人__)    |
      \      ` ⌒´   ,/
      /         ::::i \
     /  /       ::::|_/
     \/          ::|
        |        ::::|  キュム
        i     \ ::::/ キュム
        \     |::/
          |\_//
          \_/
438433:2014/01/11(土) 22:48:47.30
>>433
>>435
素人なりに1つだけ思いついた方法は
結果値の表番号を一つ一つサーチして該当する行を1行削除するを繰り返し
削除後にソートして寄せると完成しますが 
数百回処理を繰り返す必要がり力業っぽい
のでこのやり方は違うかなと思いました
439デフォルトの名無しさん:2014/01/11(土) 23:13:09.99
数百回くらいなら昨今のPCなら全然問題ないレベルでしょ
その程度の処理量を更に削る為に労力を使う方が、初心者らしい愚行だよ

力業でも0.2秒で終る処理を、0.1秒で終るようにするための模索に
何十分や何時間の時間を浪費するとか、バカバカしくてやってられん
440433:2014/01/11(土) 23:33:47.37
>>439
1発で比較&間引きをしてくれる魔法のコードがあるかと思いましたが、無いようで、、 
ありがとうございました。
441デフォルトの名無しさん:2014/01/11(土) 23:34:47.28
今時は性能の高いパソコンを買ったり借りたりするほうが安いもんな
その時間で別の仕事したほうが効率いい

とはいえ、一定以上の効率をもったコードを常に書けるだけの能力を持っていたいとは思うね
そうすりゃパソコン借りる時間が減る=金まわりがよくなるからな
442デフォルトの名無しさん:2014/01/11(土) 23:38:38.28
俺もフィルタ機能で一発解決だと思うが
なぜダメなのかよくわからんな
443ピラフ:2014/01/11(土) 23:40:07.65
調査結果と表番号でソートしてカットアンドペーストでやっちゃえば現実的にもいけそうじゃない?
444433:2014/01/12(日) 00:27:32.65
>>442 443
データーが欠落した状態で結果のみが別のブックへ書き出されている状態でしてフィルタがかけられない状態かと思います。
(フィルタ機能を完全熟知してないので間違っているかもしれませんが)
自分の知識不足ですみません 激しく堂々巡りをしているようですので本日は一旦落ちます。。
445デフォルトの名無しさん:2014/01/12(日) 00:51:33.87
1から1000までの連続した整数から
ランダムに存在する特定の数値をスマートに間引く方法 (2,3,5,7,10・・ こういう数を一括削除する)

うまい方法は無いでしょうか?
数時間考えましたが全く解決方法が見つからず吐きそうなのでもう寝ますw
446デフォルトの名無しさん:2014/01/12(日) 01:07:43.46
>>445
その数値が一定の法則に従っていない以上、順次検索して間引くしかないわけだが

間引く元シートは準備されてるのか?
だったらそこから結果のシート(ブック)参照して結果有るかないかチェックする列つくって
その列でフィルタすればVBAなんか使わなくてもいいぞ

まあVBAでやるなら>>438のやり方でいいんじゃね
447デフォルトの名無しさん:2014/01/12(日) 01:31:20.39
>>445
状況がよく分んないけど、
ADO使ってシートにそういうSQL
投げてやればいいんじゃないの?
448デフォルトの名無しさん:2014/01/12(日) 03:18:51.28
awkなどで、よくある処理だよ

列(フィールド)の区切りは、スペースかタブ?
すべての行の最初の列(表番号)だけを抜き出して、
ファイルAに保存する
(Excelの画面でもできる)

ファイルAをsortコマンドで、
数字でソートして、ファイルBに保存する
(Excelの画面でもできる)

(ここで表番号の重複を考えて、念のために、
ファイルBをuniqueコマンドで、
連続した重複行を除いて、ファイルCへ出力する
ファイルB、Cの行数を比較する
行数が異なっていたらエラー?)

ループ変数をインクリメントさせながら、
ファイルBを1行ずつ読んで、数字を突き合わせる
ファイルBに存在しない数字を、
ファイルDへ出力する
449448:2014/01/12(日) 03:20:52.50
一方、ここからは、最初のファイルが、
表番号順に並んでいない時の処理です

最初のファイルから、1行ずつ、
最初の列(表番号)を抜き出して、
連想配列のキーとして、
その値に、2列目から改行までを代入する

ファイルBを1行ずつ読んで、
その数字をキーとして、
連想配列の値を取り出して、文字列を連結する

このように処理は、細かく単機能に分けると、
バグを減らせます
sort + uniqueも、よくあるパターン
450448:2014/01/12(日) 03:33:07.53
>449 自己レス
Excelの画面で、
表番号でソートするだけで出来るわw
451448:2014/01/12(日) 03:44:48.55
>>445
まず幾つかのランダムな数字をソートして、
ファイルAへ出力する
(Excelの画面でもできる)

ループ変数をインクリメントさせながら、
ファイルAを1行ずつ読んで、数字を突き合わせる
ファイルAに存在しない数字を、
ファイルBへ出力する
452448:2014/01/12(日) 05:49:03.84
diffで差分を取る方法もある

まず幾つかのランダムな数字をソートして、
行区切りで、ファイルAへ出力する
(Excelの画面でもできる)

Excelの画面の、自動ナンバーで、
1-1,000の千行を代入し、ファイルBとして保存する

diffで、両者の差分を取る
453ピラフ:2014/01/13(月) 21:17:31.14
>>445
えと、数列の差を求める方法と、要素を削除する方法があって
それぞれこんな感じ。
http://uploda.cc/img/img52d3d869b7f67.png

これらを組み合わせるとできるはずよ。

コードはこんな感じで
https://friendpaste.com/1ooShGbBWBLAPVIitWTlDD?rev=303435326666
454デフォルトの名無しさん:2014/01/13(月) 21:24:07.27
コードってその人のクセが出るよね
全大文字化とかの表面的なところを隠しても
455ピラフ:2014/01/13(月) 21:45:43.48
>>453
完全に間違ってた、こっちで
https://friendpaste.com/1ooShGbBWBLAPVIitWTlDD

>>454
そういうのあるよね。ピラフはCAPICOMのサンプルコードを参考にしてる。
インデントは空白3文字で変数名はアッパーキャメルケース。
変数の宣言は使う直前。
456デフォルトの名無しさん:2014/01/13(月) 21:47:01.99
出来るだけ個性を出さないように変数を減らそうとして
with を使いまくったら個性的過ぎると怒られたことがある。
457ピラフ:2014/01/13(月) 21:49:50.33
>>456
ガハハ、ピラフガハハ。
Withブロックマスターを名乗ったら言いと思うよ。
458デフォルトの名無しさん:2014/01/15(水) 12:12:50.31
なぁ、ピラフ
桃白白しらない?
459デフォルトの名無しさん:2014/01/15(水) 13:02:26.08
知らないって答えるに決まってるだろ
その問に知ってるって答えるくらいなら、初めからコテ変えなんてしない



とかマジレスしてみる
まあ>>458も、その辺を把握している上でのツッコミなんだろうけどw
460デフォルトの名無しさん:2014/01/16(木) 02:24:37.89
With With の 中 With から 外 With を 使うにはどうすれば
461デフォルトの名無しさん:2014/01/16(木) 02:34:02.86
>>460
Withの使用を辞めることだ。
462デフォルトの名無しさん:2014/01/16(木) 02:34:59.47
むかしこのスレにいた、かなりExcelやVBAに詳しい固定の名前の人はどこ行った?
ちょっと性格は変だけどスキルはあったし丁寧に回答してた人。
463デフォルトの名無しさん:2014/01/16(木) 03:26:21.55
>>461
なるほど。勉強になります。ありがとうございます。
464デフォルトの名無しさん:2014/01/16(木) 09:11:14.50
>>462
たんすの前で何を着て出てくるか悩んでるよ
465デフォルトの名無しさん:2014/01/16(木) 09:47:10.65
>>462
何人か居るけど、誰のこと言ってるの?
466デフォルトの名無しさん:2014/01/16(木) 09:51:25.46
>>460
Parentプロパティ
467デフォルトの名無しさん:2014/01/16(木) 15:38:16.99
亀仙人のことじゃね
468デフォルトの名無しさん:2014/01/18(土) 15:56:54.23
ExcelVBAのコードから
あるフォルダにある画像ファイル(ファイル名は選択範囲のselectされたセルの中)をすべて縮小(たとえば70%)して上書き保存させるにはどうすればいいですか?
他のフリーソフトの助けを借りるのでもいいです。
469デフォルトの名無しさん:2014/01/18(土) 16:30:55.58
>>468
その処理の内、何処まで出来てて、どこが解らないの?

まさか、1から全部コード書いて差し出せとか言わないよね?
470468:2014/01/18(土) 16:44:55.37
>>469
画像縮小だけがわかりません。
下が自作コードです。

=====================================
Sub Unko()
Dim C As Range
Const PATH As String = "C:\Manko"
For Each C In Selection
SizeSmall (PATH & "\" & C.Value)
Next C
End Sub

Sub SizeSmall(F As String)
■■■ここが分からないのです■■■
End Sub
=====================================
471デフォルトの名無しさん:2014/01/18(土) 17:02:29.21
>>470
つ ImageMagick

WinAPI使う方法とか、ActiveX導入する方法とか、Imageコントロール使う方法とかいろいろあるけど
とりあえずImageMagickで目的は果たせるから、それ以上を望むなら勝手に勉強してね
472デフォルトの名無しさん:2014/01/18(土) 17:03:29.95
>>471
バカじゃねw
473470:2014/01/18(土) 17:13:43.13
>>471
ありがとうございます。
これですね。
http://ja.wikipedia.org/wiki/ImageMagick
素晴らしそうですね。

ところが質問です。
[Q1] WikiにVBAと書いてないけど大丈夫ですか?
[Q2] VBAのコードに書くにはどんな呪文を唱えればいいですか?
474デフォルトの名無しさん:2014/01/18(土) 17:16:26.19
ImageMagickはVBAで使えないよw
475470:2014/01/18(土) 17:17:25.84
>>474
神に誓いますか?
476デフォルトの名無しさん:2014/01/18(土) 17:19:37.65
>>474
コマンドラインで使うのに、VBAも糞も無いだろw
477デフォルトの名無しさん:2014/01/18(土) 17:20:30.89
>>475
何をですか?
478デフォルトの名無しさん:2014/01/18(土) 17:20:33.50
>>476
糞は便器の中にありますよ
479デフォルトの名無しさん:2014/01/18(土) 17:21:40.19
>>476
誰がコマンドで使うと言いましたか?
ImageMagickはVBAで使えない
~~~~~~~~~~~~~~~~~~~~~~~~~~
480デフォルトの名無しさん:2014/01/18(土) 17:29:32.87
荒らしにかまうなの法則
481デフォルトの名無しさん:2014/01/18(土) 17:42:38.57
苦しい言い訳の荒らしなど放置の方向で
482デフォルトの名無しさん:2014/01/18(土) 17:46:54.09
今回「コマンドラインから利用できるソフト」の存在を知りましたが
世の中に出回ってるフリーソフトの何割くらいがこの「コマンドラインからの利用」に対応してますか?

「コマンドラインからの利用」ができればどうにかすればVBAでも使えるんだろ?使える気がする。だから可能性が広がる。
483デフォルトの名無しさん:2014/01/18(土) 18:23:38.44
有名なフリーソフトウェアであるHello World!だけでも数万種は公開されてるよ。
484デフォルトの名無しさん:2014/01/18(土) 23:22:26.46
VBAにファイルではなく画像として取り込めたよね
コピーして別アプリに張り付けるとかならやったことあるけど
プロパティでサイズってないのかな?
485デフォルトの名無しさん:2014/01/18(土) 23:23:46.33
ってまんこ画像かよ
486デフォルトの名無しさん:2014/01/18(土) 23:25:41.07
質問者も回答者もどっちもスベってるパターン最近多いよね
487デフォルトの名無しさん:2014/01/19(日) 00:19:07.25
そして、解ってないのに上から目線でツッコミ入れる滑稽な奴もねw
488デフォルトの名無しさん:2014/01/19(日) 07:42:05.86
>プロパティでサイズってないのかな?

Microsoft Shell Controls And Automation に参照チェックして出来る
というか以前自分のPCのフォルダに有る画像一覧のサイズを貼り付けるのを作ったことはあるけどね
489デフォルトの名無しさん:2014/01/19(日) 08:26:53.48
>>484
画像のサイズは基本的にヘッダに格納されてるから、バイナリ読めば解るし
StdPictureオブジェクトに格納すれば、Twips単位での取得は簡単にできるよ

でも、ファイル名とかは、ファイル名を書き換えるだけで意味があるけど
画像サイズは、ヘッダのサイズを書き換えても、画像データを変換しなければ
画像の実サイズとヘッダ上に記されたサイズ情報が不整合を起こすだけなので
サイズプロパティがあれば、サイズ変更が出来るってものじゃない
重要なのは「情報」の書き換えではなく「実体」の変換だからね
塩の入った容器のラベルを「砂糖」に貼り替えても、中身の入れ替えをしなかったら
中身は塩のままなのと同じ
490デフォルトの名無しさん:2014/01/19(日) 11:52:49.86
フォルダ下の画像ファイルじゃなくて
Excelワークシートに貼り付けられた画像ファイルの縮小をしたいんじゃないかと思うんだが
491デフォルトの名無しさん:2014/01/19(日) 23:10:35.11
VBAって、プロパティとメソッドがあるからオブジェクト指向なんだと思うけど
クラスモジュールを使うことはないの?
どの入門書でも標準モジュールしか扱ってない。
492デフォルトの名無しさん:2014/01/19(日) 23:36:56.50
入門書で扱ってなければ、もう少しレベルの高い本探そうとか思わんのかね
493491:2014/01/19(日) 23:49:52.75
>>492
そんな本ありますか?
494デフォルトの名無しさん:2014/01/20(月) 00:16:34.66
ありますん
495491:2014/01/20(月) 01:10:09.85
>>494
その書の名は?
496デフォルトの名無しさん:2014/01/20(月) 01:18:10.65
>>495
自分で検索もできないような人間にクラスが使えるとは思えないけど、ほれ
http://www.kinokuniya.co.jp/f/dsg-01-9784816336515
497491:2014/01/20(月) 01:39:46.17
>>496
2003じゃないか。
売り切れじゃないか。
498デフォルトの名無しさん:2014/01/20(月) 02:04:59.15
>>497
国外追放レベルのバカだな

Excelのバージョンが変わってもクラスの使い方なんてほぼ同じだし、本屋はここ1軒だけじゃないし
世の中には図書館という便利な物がある

この程度のこといちいち教えなきゃわからんのか
おまえはプログラミングするな質問するなするな迷惑だ
499491:2014/01/20(月) 02:23:26.65
>>498
もともとおかしいんだよ、きみの顔は。
http://blog-imgs-48.fc2.com/a/y/a/ayaushi/201303301847509b1.jpg
500デフォルトの名無しさん:2014/01/20(月) 07:17:48.73
反論につまってそういう幼稚なレッテル貼りに走るのって
自分の品位を貶めるだけの行為だって気付かないのかな?

まぁ>>498も口が悪いが
「確かにその通りだけど、国外追放レベルはヒドス・゚・(つД`)・゚・ 」
くらいの、余裕を持った返しが出来る大人になろうぜ
501デフォルトの名無しさん:2014/01/20(月) 07:22:07.74
>>491
まぁVBAでそんなに無理してまでクラスモジュールを使わなくてもコードは組めるってことだね。
本当にきちんとクラスについて勉強したいなら、JavaやC#を勉強した方がいい。
VB.Netですらデザインパターンを踏襲した様なきちんとした本は見たことが無い。
502デフォルトの名無しさん:2014/01/20(月) 08:19:32.85
>>491
継承とかコンストラクタに引数渡せないとかたいして便利じゃないから
あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
503デフォルトの名無しさん:2014/01/20(月) 08:43:55.01
便利じゃないと感じるのはスキルが低いからだろ

そりゃ昨今のメジャーな言語と比べて、相対的に便利かと言ったら便利じゃないけど
どの言語を使うかって話ではなく、VBAを使う上でクラスを活用するかどうかって話では
他言語と比べて便利かどうかという相対的な話ではなく、絶対的に便利かどうかであって
その観点で見れば、スキルさえあれば十分便利に活用できる
いろいろ不足はあってもどかしい部分も多いけど、使わないよりは使った方が遙かに便利という意味でね
504デフォルトの名無しさん:2014/01/20(月) 10:46:52.40
>>503
その例えで行くなら、VBAを使う上でクラス有りとクラス無しを比較して相対的にどうか、って考えなきゃ
505デフォルトの名無しさん:2014/01/20(月) 11:54:18.37
だからそういう話でしょ?
506デフォルトの名無しさん:2014/01/20(月) 14:18:53.69
>>502
インターフェイス継承はできるし、どうしても引数ありでオブジェクトを作りたいならFactoryメソッドを作ればいい。

> あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
機能毎にアドインにまとめればいいんじゃないかな。
507デフォルトの名無しさん:2014/01/20(月) 14:37:20.31
例えば、
http://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

(続く)
508デフォルトの名無しさん:2014/01/20(月) 14:38:35.12
(続き)
Staff.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が順番を保証しないというのは、今回は無視)
509デフォルトの名無しさん:2014/01/20(月) 14:53:56.46
ん?CollectionってAddした順で取り出せないの?
510デフォルトの名無しさん:2014/01/20(月) 15:09:55.04
>>509
基本的にはAddした順だけど、仕様としてそれは保証されてない
511デフォルトの名無しさん:2014/01/20(月) 22:32:00.44
VBAのcolletionって、Addするときに位置指定があるんだが
指定位置勝手に変わると話にならんわけだが、ホントに保障されてないのか?
512デフォルトの名無しさん:2014/01/20(月) 22:59:04.99
>>511
仕様見ればわかることを他人に聞くな
513デフォルトの名無しさん:2014/01/21(火) 00:04:41.49
>>491
Object指向言語というより
Object指向に片足突っ込んだ構造化言語かな。

どうもMicroSoftはこんな片足突っ込んだような状態が好きなのか、
.Netフレームワークも関数型言語に片足突っ込んだObject指向言語っぽいよね。

「Object指向は考え方」って人もいるだろうけど、VBAの場合は上のレスに有ったような
面倒なストラテジーパターンも、.Netではシュチュエーション次第でもっと簡単なテンプレートパターンで書けるしね。
514デフォルトの名無しさん:2014/01/21(火) 01:11:35.57
>>503
>>502 は別に他の言語と比較してる訳じゃないんだが...
まあ、使いたいなら使えばいいんじゃね?
スキル誇示したいお年頃みたいだし (w
515デフォルトの名無しさん:2014/01/21(火) 06:25:03.06
>>506
インターフェース継承って何?
このコードの内、何が何を継承してるの?
見た感じ、インターフェースを実装して
処理を移譲することで似たような効果をもたらしているだけにしか見えないんだけど。
516デフォルトの名無しさん:2014/01/21(火) 08:12:19.84
>>506
こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
517デフォルトの名無しさん:2014/01/21(火) 09:30:04.82
>>514=>>516
皆に否定されて悔しかったんだね...わかります (w
518デフォルトの名無しさん:2014/01/21(火) 10:10:47.90
>>502
こういうのを得意気に語ってた時期もあったなぁ... (遠い目)
519デフォルトの名無しさん:2014/01/21(火) 10:25:24.40
>>515
用語等については異論もあるでしょうが、重要なのは>>507のリンク先のC++のポリモーフィズム同等のことがVBAでも実現できることです。
この範囲で実現できるものであれば、VBAでもクラスが活躍できます。

それから、言わずもがなですが、クラスを使うことによるカプセル化の恩恵も受けます。
このことは、xUnitと親和性が高いです。

それと、WithEventsを使ったExcelオブジェクトとのEventを介したやり取りも便利です。
520デフォルトの名無しさん:2014/01/21(火) 16:57:10.56
webページのあるURLの「ショートカットファイル」」をデスクトップに作るにはどういうコードを書けばいいですか?

INPUT: URL
OUTPUT: 「ショートカットファイル」 on デスクトップ

ファイル名はなんでもいいです。
521デフォルトの名無しさん:2014/01/21(火) 16:58:07.68
>>520
スレ違い
522デフォルトの名無しさん:2014/01/21(火) 20:11:15.04
>>520
中身は単なるテキストファイル、拡張子はurl、そんだけ
523520:2014/01/21(火) 21:40:16.22
>>522
でもメモ帳では開けないですよ。
524デフォルトの名無しさん:2014/01/21(火) 21:40:19.01
ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
525デフォルトの名無しさん:2014/01/21(火) 21:58:29.65
>>519
で?
よく分んないけど、これを継承と言うなら
これでフォームやボタンを継承して
何か作ってみてよ。
526デフォルトの名無しさん:2014/01/21(火) 22:06:05.11
>>523
普通に開ける
527デフォルトの名無しさん:2014/01/21(火) 23:07:21.24
>>517
まあ、がんばれ (w
528523:2014/01/22(水) 00:26:27.94
>>526
あ、ひらけた
でも、バイナリファイルになってるんですよ
529デフォルトの名無しさん:2014/01/22(水) 02:37:51.49
>>528
そいつは拡張子がlnkじゃないか?
IEのお気に入りの中のどれかを開いてみ
530デフォルトの名無しさん:2014/01/22(水) 02:39:50.87
ググれば出てくるような話じゃないですかああああああああああああああ
531デフォルトの名無しさん:2014/01/22(水) 03:53:34.96
>>525
負け惜しみはその辺にしとけ
532デフォルトの名無しさん:2014/01/22(水) 07:37:22.14
>>531
あー負け惜しみ、負け惜しみ。
負け惜しみでもなんでもいいから
早く>>525をやってみてくれよ。
場合によって継承は移譲で代用出来るというだけのことを
なんでわざわざ「インターフェース継承」なんて言っちゃうのか。
用語の違い云々って言ってるけど、デザインパターンどうのと言ってるところの
リンク貼ってるくらいだから
その観点からも継承と移譲はそれぞれどう言う時に使うかの違いくらいは分かってるんだろ?
ポリモーフィズムなんてのは100も承知で言ってるんだよ。
移譲はあくまで移譲であって、継承の代用に出来る場合があるだけで
用語の違いとかじゃなくて、そもそもが全くの別物だろ。
533デフォルトの名無しさん:2014/01/22(水) 07:42:27.38
> あー負け
まで読んだ

素直でよろしい
534デフォルトの名無しさん:2014/01/22(水) 10:40:37.99
>>532
> 早く>>525をやってみてくれよ。
VBAで「継承」ができるとは誰も言ってないと思います。

> なんでわざわざ「インターフェース継承」なんて言っちゃうのか。
かなり昔から、VBA(VB6)のimplementsを使ったコレのことを「インターフェース継承」と言う人が多いです。
語源は、Microsoftかもしれません。
なお、Microsoftはコレのことを委譲とは言わず委任と言っているようです。

> 5.1.3| 事前バインディングによるポリモーフィックなプログラム
> Visual Basic 6の開発者は、さらにもう1つの別の方法で継承を実装することができます。それは、いわゆる
> 「インターフェイスの継承」と呼ばれる方法です。この魅力的な名前は、Implementsステートメントを使用する
> 非常に一般的な方法を表しています。この方法では、基本クラスからメソッドのシグネチャだけを「継承」し、
> その実装は継承しません。したがってこの場合にも、実際の処理を行うすべてのプログラムは、それぞれの
> 開発者の責任において記述しなければなりません。
http://msdn.microsoft.com/ja-jp/library/dd297718.aspx
535デフォルトの名無しさん:2014/01/22(水) 13:42:42.47
>>532
> 移譲はあくまで移譲であって、継承の代用に出来る場合があるだけで
> 用語の違いとかじゃなくて、そもそもが全くの別物だろ。

イジョウを正しく変換できない奴にあれこれ言われたくないが、同じか別物かなんて
ことはどうでもいいことで、それで何ができるのかが重要。
536デフォルトの名無しさん:2014/01/22(水) 13:47:58.08
不毛な言葉遊びはよそでやってくれ
なんにしても言葉の定義なんてTPOで変化するんだから水かけあったって無意味だろ
537デフォルトの名無しさん:2014/01/22(水) 13:51:58.32
定期的に「VBAのクラスなんか不要・役立たず」って言う奴でてくるね
538デフォルトの名無しさん:2014/01/22(水) 14:01:12.25
過疎スレなのにちょっとでも自分の気に入らない流れになると止めたがる奴
539デフォルトの名無しさん:2014/01/22(水) 14:15:26.81
>>537
他の言語のクラスを知って、
「VBAのクラスを見下す俺博識でカッケー」
をやりたいだけでしょ

だから毎度のことだが直ぐに崩されて泣きを見る
540デフォルトの名無しさん:2014/01/22(水) 21:58:27.42
>>539
どっちかって言うと VBA でもできるもんって言ってる奴が自爆してるとしか思えんが (w
まあ、C#A を実装すればこんな不毛な争いは起きないので、早めに頼むよ ⇒MS
541デフォルトの名無しさん:2014/01/22(水) 22:21:24.54
無料でVS配ってんだからそっち使えよ
542デフォルトの名無しさん:2014/01/22(水) 23:13:00.82
>>539
カッケー(ワラ
最高にアホっぽい表現だな(藁)
543デフォルトの名無しさん:2014/01/23(木) 00:30:34.26
VBAのプログラム使いこなす俺
月給手取り20万でちょうカッケーw
544デフォルトの名無しさん:2014/01/23(木) 02:29:35.46
コンプレックスを刺激されちゃったみたいだな
545デフォルトの名無しさん:2014/01/23(木) 05:26:49.00
ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwww
546デフォルトの名無しさん:2014/01/23(木) 07:21:56.98
なんだ継承つかえないのか




ゴミ
547デフォルトの名無しさん:2014/01/23(木) 07:46:04.62
ってことにしたくて、必死に印象操作しなければならないほど便利なVBA

本当に糞だったら突っかかる必要すら無いもんなw
548デフォルトの名無しさん:2014/01/23(木) 09:24:18.49
>>541
Excel と Visual Studio の区別もつかんのか (w
549デフォルトの名無しさん:2014/01/23(木) 11:09:02.52
シートで、入力セルと空欄セルが入れ交じっています。
これをまず上方向に重力があるときみたいに入力セルを上に落とし (←テトリスの逆バージョンみたいに)
さらに左方向に重力があるときみたいに入力セルを左に落とすには
どういうコードにすればいいですか?
550デフォルトの名無しさん:2014/01/23(木) 11:38:08.59
>> 549
「落とす」って途中経過も表示するの?
それとも最終結果だけ表示するの?
551デフォルトの名無しさん:2014/01/23(木) 11:52:16.81
>>549
普通にループで条件判断すればいいだけじゃね?
それが解らないとかなら、まだVBA使うのは君には早いから
勉強してでも達成したいか、勉強するくらいなら諦めるか、好きな方を選んでね
552デフォルトの名無しさん:2014/01/23(木) 12:30:05.05
縦だけとか横だけなら簡単だが
縦横両方となると何がしたいのかわからなくて根本から間違ってる気がしてくる
553デフォルトの名無しさん:2014/01/23(木) 15:57:23.33
下へ移動してから左へと、
左へ移動してから下へでは、結果が違ってくる

下へ移動してから、左へ移動したいの?
サメガメに似ているような
554デフォルトの名無しさん:2014/01/23(木) 16:01:46.44
この程度の仕様すら把握できないのかよ
555デフォルトの名無しさん:2014/01/23(木) 16:18:13.03
>>553
> 下へ移動してから

もうここから違うし (w
556デフォルトの名無しさん:2014/01/23(木) 18:13:05.91
スクロールバー動かすとか
557デフォルトの名無しさん:2014/01/23(木) 18:14:28.47
>>540
> まあ、C#A を実装すればこんな不毛な争いは起きないので、早めに頼むよ ⇒MS
こういうの使えば?
ttp://outofmem.tumblr.com/post/62233308198/excel-dna-1
558デフォルトの名無しさん:2014/01/23(木) 20:13:31.82
>>549
1.まず入力セルの1つ上のセルに値が入っていたり入力セルが1番上だったら3へ。
2.End(xlUp)で自分より上のセルに値がある時のセル位置を求める。求めたセル位置に
値があればその1つ下のセルに、値がなければその位置に入力セルの値を入れて元の入力セルの値を消す。
3.入力セル(2を通っていたら2で値を入れたセル。以降入力セルと呼ぶ)の1つ左のセルに値が入っていたり入力セルが1番左だったら5へ。
4.End(xltoLeft)で自分より左のセルに値がある時のセル位置を求める。求めたセル位置に
値があればその1つ右のセルに、値がなければその位置に入力セルの値を入れて元の入力セルの値を消す。
5.処理を終了する。

多分こんな感じでループを使わないで出来る・・・ような気がする。
559デフォルトの名無しさん:2014/01/23(木) 20:25:59.04
>>557
いいねコレ、Linqも使えるのか。
ぱっと見た目、WorkSheetsもジェネリック扱いっぽいし。
ってことは多分、列や行もそんな扱いなんだろうね。
後は仕事場で使う許可が下りるかどうかだけど。
560549:2014/01/23(木) 23:22:56.75
このスレのことだからVBAの達人がいっぱいいるのかと思いきや実にたいしたことがないな。
ちょっと1分間空想してるだけで下のコードを思いつき、動作確認すると問題なく動き一瞬で解決した。
たった4行で実現できることだよ。

Sub Unko()
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlToLeft
End Sub
561デフォルトの名無しさん:2014/01/23(木) 23:59:48.40
>>560
それで、だからどうしたの僕ちゃん
ほめて欲しいのかちゅら
すご〜イ、良く頑張ったわね、偉いわよ僕ちゃん
562デフォルトの名無しさん:2014/01/24(金) 00:03:57.36
へぇ、これは自演だったとしても凄いな。
次は30行でテトリス作ってみてよ。
563デフォルトの名無しさん:2014/01/24(金) 01:24:52.94
ここは質問スレだよ?雑談はどっかあっち行って
564デフォルトの名無しさん:2014/01/24(金) 01:26:27.06
>>563
自治厨うぜーぞ
誰もお前なんか必要としてないんだから早く消えろ
565デフォルトの名無しさん:2014/01/24(金) 01:55:32.38
ゴミじゃん
566デフォルトの名無しさん:2014/01/24(金) 07:27:32.48
>>560
ドヤ顔のとこ悪いけど、それって上と左に飛ばす対象セルの
下や右に入ってる値の入っているセルも一緒にずれない?
そうだとしたらコードもダメだけど、動作確認もダメダメだね。
567デフォルトの名無しさん:2014/01/24(金) 10:57:23.36
え?
568デフォルトの名無しさん:2014/01/24(金) 11:55:35.88
>>560
ゴミコードw
569デフォルトの名無しさん:2014/01/29(水) 23:46:00.47
VBAをある程度マスターしたいので
こんどはスマホで自作アプリをいっぱい作りたいです。

プログラミング言語は変わるんですよね?
どの入門書を読めばいいでしょうか?
VBAの知識があるのでプログラミング全般の基礎(変数の使い方、if文、for文、など)は省いて
android開発に特化した入門書を希望なのですが。
570デフォルトの名無しさん:2014/01/29(水) 23:59:50.67
>>569
スレチ
泥は基本Java
VBAの知識なんてほとんど役に立たん
571デフォルトの名無しさん:2014/01/30(木) 00:09:17.85
572デフォルトの名無しさん:2014/01/30(木) 00:15:08.28
>>571
馬鹿かオメェは
580もjavaやれって言ってるだろ。

andoroidでどうしてVBAって発想がでてくるんだよ
573デフォルトの名無しさん:2014/01/30(木) 00:19:24.55
>>580
なるほどぉー。そうなんだー。
574デフォルトの名無しさん:2014/01/30(木) 00:20:19.41
プログラミング言語はVBAしか知らないからそういう発想だ、このやろう
575デフォルトの名無しさん:2014/01/30(木) 03:00:00.80
クラスモジュールAの中で、クラスモジュールBをインスタンス化して利用したり
クラスモジュール内から、標準モジュールのパブリックなプロシージャを呼ぶのは設計としてはアリですか?
576デフォルトの名無しさん:2014/01/30(木) 07:30:04.35
>>575
有り。
ただし、インスタンスを生成してる訳ではないので、
呼び出し先の内容はすべて一緒になることに注意。
577デフォルトの名無しさん:2014/01/30(木) 10:03:18.86
>>575
> クラスモジュールAの中で、クラスモジュールBをインスタンス化して利用したり
これはあり。

> クラスモジュール内から、標準モジュールのパブリックなプロシージャを呼ぶのは設計としてはアリですか?
これはお勧めできない。
詳しくは「結合度」でググれ。
578デフォルトの名無しさん:2014/01/30(木) 10:45:28.97
お勧めできないは過剰だろ
留意すべきことがあるなら理解できる
579デフォルトの名無しさん:2014/01/30(木) 11:04:28.31
>>578
危険がありすぎるので過剰とは思わない。
580デフォルトの名無しさん:2014/01/30(木) 11:29:33.90
>>579
コメントに書くとかUMLで管理するとかいくらでもフォローきくじゃん
標準なパブリックは使わないならその需要はどうやって埋めてんの?
581デフォルトの名無しさん:2014/01/30(木) 11:35:19.10
>>580
> コメントに書くとかUMLで管理するとかいくらでもフォローきくじゃん
そういう問題じゃなくて、結合度やカプセル化の問題。

> 標準なパブリックは使わないならその需要はどうやって埋めてんの?
使わないとは言ってないよ。クラス内部からは呼ぶべきではないと言ってるだけ。
582デフォルトの名無しさん:2014/01/30(木) 12:36:50.72
>>581
>クラス内部からは呼ぶべきではない
その代替案をご教示賜りたく
これで疑問は全て解消される気がする
583デフォルトの名無しさん:2014/01/30(木) 12:39:05.54
>>582
> その代替案をご教示賜りたく
代替案も何も、俺は基本呼ばないから代替案も糞もないんだが。
584デフォルトの名無しさん:2014/01/30(木) 12:40:36.33
ひょっとして、他言語で言うUtilityクラスにまとめると言えば納得するのかな?
585デフォルトの名無しさん:2014/01/30(木) 13:29:20.03
あーそういうことかー
じゃあやっぱり留意すべき程度じゃないのか
586デフォルトの名無しさん:2014/01/30(木) 14:02:40.66
Utilityクラスのメソッド呼ぶのも標準モジュールのパブリックメソッド呼ぶのも、あまり変わらんと思うけどなぁ。
好きにすればいいんじゃないかな。
587デフォルトの名無しさん:2014/01/30(木) 14:14:19.76
別にUtilクラスなんか作らなくても、標準モジュール名をUtilに変更してUtil.hoge()とか呼べばいいじゃん
588デフォルトの名無しさん:2014/01/30(木) 15:52:36.82
>>584-587
>>577は結合度の問題だっていってるだろ
そのUtilクラスなり標準モジュールなりに依存するようになるから
クラスの独立性が保てなくなるって話だろ

設計方法論の話であって実装の問題じゃないからな
他のモジュールに依存するクラスを良しとするなら良し
ただし一般的なクラス設計では、他のクラス(モジュール)への依存度は低い方が良いとされてる
589デフォルトの名無しさん:2014/01/30(木) 16:03:53.46
>>587に賛成
590デフォルトの名無しさん:2014/01/30(木) 16:22:09.70
>>588
標準モジュール名をUtilに変更して使うのと、C++でstd namespaceにある奴を使うのと、そんなに違いはないと思うけど
591デフォルトの名無しさん:2014/01/30(木) 17:36:51.01
標準モジュールの名前なんてどうでもいいんだけど、何でそこにこだわってる?
標準モジュール使うのにモジュール名で修飾することなんてほとんどないぞ
もしかして、標準モジュールってそこにメソッドなりがシステム側で用意されてると思ってるのか?

システム側で用意されているものに依存するのと
ユーザ側で用意するのものに依存するのと
そんなに違わないと思うならそれでいいんじゃないかね
592デフォルトの名無しさん:2014/01/30(木) 18:23:41.57
>>591
> 標準モジュールの名前なんてどうでもいいんだけど、何でそこにこだわってる?
> 標準モジュール使うのにモジュール名で修飾することなんてほとんどないぞ

グローバルな何かを使うときに、気をつけないといけないのが名前衝突。
標準モジュールでも名前を付けて呼ぶときにそれで修飾しておけば、別の標準モジュールに同名のメソッドが作成されても問題無い。
加えて、他の言語でよくある「namespace」的な役割も持たせられる。

> もしかして、標準モジュールってそこにメソッドなりがシステム側で用意されてると思ってるのか?

何を言ってるんだかわからない。

> システム側で用意されているものに依存するのと
> ユーザ側で用意するのものに依存するのと
> そんなに違わないと思うならそれでいいんじゃないかね

Utilクラスを作ってそこに自作メソッドを入れて使うのと、標準モジュールに名前を付けて使うのに、それほど差はないよねって話。
593デフォルトの名無しさん:2014/01/30(木) 19:11:22.87
>>592
>Utilクラスを作ってそこに自作メソッドを入れて使うのと、標準モジュールに名前を付けて使うのに、それほど差はないよねって話。
依存関係においてはクラスだろうが標準モジュールだろうが大差ない

Utilクラスに依存するのはOKなのにUtil標準モジュールに依存するのはダメとかいうのは話がおかしい
つまり標準モジュール呼び出しの代替案がUtilクラスにまとめるってのはおかしな話だが、それは俺の意見じゃないぞ
594デフォルトの名無しさん:2014/01/30(木) 19:48:24.29
クソどうでも良い話が続いてますが、皆さんお気兼ねなく質問をどうぞ
595デフォルトの名無しさん:2014/01/30(木) 22:18:37.25
むしろUtilityクラスのようなものこそ共通結合で作るもので、
それこそ標準モジュール向きだと思うけどなぁ。

>>582
代替え案としては、クラスモジュールで作っておいて
そのインスタンスを、使う側のクラスのプロパティに設定して内部で使う。かなぁ。
596デフォルトの名無しさん:2014/01/31(金) 00:46:27.00
VBEをコードで操作ってどんな利用シーンがあるかね?
597デフォルトの名無しさん:2014/01/31(金) 06:18:42.27
>>596
て言うかそんなこと出来るのかね
598デフォルトの名無しさん:2014/01/31(金) 07:20:58.00
ソースやらフォームやらをファイルへ一括出力して保存してる
プロシジャを他のブックにエクスポートとか出来たりもしたんじゃなかったっけ
(俺には出来んけど)
599デフォルトの名無しさん:2014/01/31(金) 12:26:54.30
できるけど事前に設定が必要

ファイル - オプション - セキュリティセンター - セキュリティ センターの設定 - マクロの設定 - VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
600デフォルトの名無しさん:2014/01/31(金) 12:43:20.84
A1:D3に何も入力されてないか、数字以外が入力されてる時にボタンでマクロ実行するとエラーを吐く事ってできますかね?
どこかに数字が入力されてる時はマクロ実行って感じで

OSは7、エクセルは2010使っています
よろしくお願いします
601デフォルトの名無しさん:2014/01/31(金) 13:54:53.98
できます
602デフォルトの名無しさん:2014/01/31(金) 16:53:24.38
ヒントを><
603デフォルトの名無しさん:2014/01/31(金) 17:59:38.26
すいません0の時もエラーで
604デフォルトの名無しさん:2014/01/31(金) 18:03:32.36
わかったかも
605デフォルトの名無しさん:2014/01/31(金) 18:14:47.51
ひんと
条件をチェックしたいタイミングのイベントプロシージャを作る
プロシージャ内で対象範囲をチェックする
606デフォルトの名無しさん:2014/01/31(金) 21:18:09.72
意外に難しいかも。
0をTextで見ようとすると、セル幅を縮めると#になってしまうし。
ここで難しいのは一点のみで、
0と空のセルの見分けだけ。
607デフォルトの名無しさん:2014/01/31(金) 21:33:39.18
ボタンを押したら実行なのでイベントは関係ない
0でも空白でもエラーなので見分ける必要はない

ほらもうできた
608デフォルトの名無しさん:2014/01/31(金) 21:34:36.44
つ クリックというイベント
609デフォルトの名無しさん:2014/01/31(金) 21:54:53.65
初心者で申し訳ないです
では、イベントプロなんちゃらってのは関係内という事でいいんでしょうか?
610デフォルトの名無しさん:2014/01/31(金) 22:12:46.74
flag = false
for each cel in range("A1:D3")
  flag = flag or (val(cel.value) <> 0)
next
if flag then
  処理
end if
611デフォルトの名無しさん:2014/01/31(金) 23:31:02.09
2ちゃんに来る前にググれよ
612デフォルトの名無しさん:2014/02/01(土) 06:16:32.91
>>609
いんにゃ、ボタンを作ると勝手に作られる関数があるでしょ。それがイベントプロシージャ。
微妙なのが関数を作っておいてシェイプとかでマクロの登録で設定した場合。
これはイベントプロシージャと呼べるのかと言えば
シェイプ押下時に起きるイベントで呼び出される設定がされた関数ってだけになるのか、
「それってイベントプロシージャってことじゃん」ってなるのかどっちだろ?
613デフォルトの名無しさん:2014/02/01(土) 07:02:12.88
>>612
シェイププロシージャ(コードが先でオブジェクト関連付けが後)にしよう
イベントプロシージャ(オブジェクトが先でコードが後)ではないことにしよう
614デフォルトの名無しさん:2014/02/01(土) 12:24:48.84
イベントで呼び出されるプロシジャがイベントプロシジャなんだから
後から関連付けようが自動的に作成されようがイベントプロシジャにきまってるだろが
615デフォルトの名無しさん:2014/02/01(土) 14:58:00.05
動かすことはできたのですが、理由がよくわからないので図書館いって勉強してきます
みなさん本当にありがとうございました
616デフォルトの名無しさん:2014/02/01(土) 21:04:47.99
動きゃ良いんだよ、動きゃ w
617デフォルトの名無しさん:2014/02/01(土) 22:27:12.53
意味わかったわw
>>610さん賢いなぁ
618デフォルトの名無しさん:2014/02/02(日) 06:22:16.18
賢くないだろw
冗長だし
619デフォルトの名無しさん:2014/02/02(日) 07:41:58.11
1行で書けるもんな
行儀のいい書き方でも3行
620デフォルトの名無しさん:2014/02/02(日) 17:07:18.39
選択したセル範囲にぴったりと重なった四角のオートシェイプをつくりたいのですが、幅と高さの指定をどうすればいいのかわかりません。
621デフォルトの名無しさん:2014/02/02(日) 17:15:35.15
>>619
1行での書き方もしよければ教えてください
622デフォルトの名無しさん:2014/02/02(日) 18:27:28.63
>>620
width、height
623デフォルトの名無しさん:2014/02/03(月) 20:23:54.81
じゃあ、整数x〜yの範囲でz個の重複しない乱数を求めるには
どういうコードを書けばいいですか?

いいアルゴリズムが思いつきません。
乱数を発生させたたびにそれまで発生させたすべての乱数と重複がないか調べ
なければ次の乱数、あればやりなおし、
というアルゴリズムよりいい方法はありますか?
624デフォルトの名無しさん:2014/02/03(月) 21:33:24.65
スレ違い

ここはとりあえず結果が出せればOKなスレ

アルゴリズムを詰めていって最適化する話は余所でどうぞ
625デフォルトの名無しさん:2014/02/03(月) 21:33:50.25
またお前かという感じ
626デフォルトの名無しさん:2014/02/03(月) 22:40:14.82
345 デフォルトの名無しさん 2014/01/05(日) 12:20:51.84
>>339の回答を知りたいんだけど
z個の乱数をx〜yの範囲で発生させ
それらが同一のものが1つもないかどうか調べて (←このアルゴリズムも簡単ではないが)
なければそれで終了、あればまた最初からやりなおし、
という方法はどう?
もっといい方法ある?

623 デフォルトの名無しさん 2014/02/03(月) 20:23:54.81
じゃあ、整数x〜yの範囲でz個の重複しない乱数を求めるには
どういうコードを書けばいいですか?

いいアルゴリズムが思いつきません。
乱数を発生させたたびにそれまで発生させたすべての乱数と重複がないか調べ
なければ次の乱数、あればやりなおし、
というアルゴリズムよりいい方法はありますか?


ふーむ
627623:2014/02/03(月) 23:03:17.99
天才的な方法を思いついた。
z個の乱数がほしいから
とりあえず範囲を1ずつ減らした範囲でz個の数列を作る。
そのあとに数決定する。
どうだ?
天才的だろう。

わからない人のために具体例を挙げる。
1から10の範囲で3個の乱数なら
次の範囲内で3個の乱数を発生させる
a= 1〜10
b= 1〜9
c= 1〜8

そして出力の3つの数は10人の人が並んでると想像して
最初の数はa番目に並んでる人。
2番目の数はスペースは詰めてb番目に並んでる人。
3番目の数はスペースは詰めてc番目に並んでる人だ。
628デフォルトの名無しさん:2014/02/03(月) 23:05:08.56
>>374のアルゴリズムが劣るのは、3つの数値の組み合わせによっては時間がかかる。
629デフォルトの名無しさん:2014/02/03(月) 23:28:46.88
>>628
いや、これ以上は恐らく無いだろ。
ソートもちゃっかり兼ねているw
630デフォルトの名無しさん:2014/02/03(月) 23:28:51.82
はい次の方〜
631デフォルトの名無しさん:2014/02/04(火) 00:07:09.11
x-yの数字をランダムに並べ替える
先頭からz個取る
終了
632デフォルトの名無しさん:2014/02/04(火) 00:18:21.61
>>621
If WorksheetFunction.CountIf(Range("A1:D3"), ">0") + WorksheetFunction.CountIf(Range("A1:D3"), "<0") Then 処理
633デフォルトの名無しさん:2014/02/04(火) 00:21:47.43
xとyは整数って書いてあるけど、その間の乱数も整数って条件なの?
634デフォルトの名無しさん:2014/02/04(火) 00:22:30.81
>>629
乱数だろ?ソートしていいんか?
635デフォルトの名無しさん:2014/02/04(火) 11:50:31.33
>>633
まえにどっかで見たときの話ならそう言う条件だったはず
実数でいいなら、数千個の乱数出力とかでもなければ単純に繰り返して重複チェックするんでいいんじゃね
数千個の乱数欲するけど重複はダメってなら、乱数の使い方がおかしいと思うぞ
636デフォルトの名無しさん:2014/02/04(火) 23:23:36.85
>>631
並べ替えは何回くらいやるの?
多くやらないとちゃんとまざらないし
x-yの範囲が広いときはさらに並べ替えの回数はものすごく多くしないといけない問題がある。
637デフォルトの名無しさん:2014/02/05(水) 03:43:18.23
1番目の要素をランダムな要素と入れ替える
2番目の要素をランダムな要素と入れ替える
以下x-yまでの要素数まで繰り返す
入れ替え回数はx-yの要素数と同じでいいだろ
要素数に対して必要な数が少ないなら効率的ではないけど、それなら単純な重複チェックでいいから
まあとりあえずこれ以上はどっかアルゴリズムのスレ探してそっち行け
638デフォルトの名無しさん:2014/02/05(水) 09:39:16.44
>>637
入れ替え入れ替えとあなたおっしゃったけどね
その入れ替え自体のアルゴリズムも考える必要があるんです
あなたとは違うんです
639デフォルトの名無しさん:2014/02/05(水) 10:44:19.76
本当の乱数は、同じ数字ばかり何回も続けて出たり、1・2・3・4と順番に出ることだってある
あらゆる可能性が平等なのが乱数

だから「よく混ざる」ってのは乱数の定義と矛盾する
それは本当の乱数ではなく、乱数のうちの1パターンを人間の意思で選んでいる(または拒否している)
人の意思が入った時点でそれは乱数ではなくなってしまう
640デフォルトの名無しさん:2014/02/05(水) 14:22:39.33
>>639
袋に最小から最大の数字を各々書いた玉があって
それを戻さないで取っていくとどうなるかを
コンピュターの乱数機能を利用して実現してるだけだから
そんな乱数の定義とは関係ない。
641デフォルトの名無しさん:2014/02/05(水) 16:07:27.16
答え出たね!
642デフォルトの名無しさん:2014/02/05(水) 16:16:06.35
ソース(n)
For i To n
ソース(i) = i
Next
while n > 0
データ(i) = ソース(random)
n ー 1
i + 1
LOOP
643デフォルトの名無しさん:2014/02/06(木) 04:12:42.33
「乱数自体の数値を得る」ではなく
「乱数を使って並べ替える」みたいなものだからな
644デフォルトの名無しさん:2014/02/06(木) 10:46:18.47
「ランダムに選ぶ」のと「乱数」は違う

前者の場合、もし最初に引いたのが「1」だったら、2回目は1が出ないことが確定してしまう
乱数なら次も1になる可能性がある

数学的に言えば確率論の中の順列の問題
ビンゴとサイコロの違いと言えばわかりやすい
質問者がわかってない
645デフォルトの名無しさん:2014/02/06(木) 13:55:18.98
そろそろ別の所でやって
646デフォルトの名無しさん:2014/02/19(水) 17:38:52.21
Sub xからyのz個の乱数重複なし()
Const x As Long=0,y As Long=1000000,z As Long=500000
Dim i As Long,j As Long,k As Single,bool As Boolean,Flag(x To y) As Boolean
'処理
Randomize
Do
bool=z>j
If bool Then k=(z-j)/(y-x-j+1) Else k=1-z/j
For i=x To y
If (Flag(i) Xor bool) And Rnd<=k Then
Flag(i)=Not Flag(i)
If Flag(i)Then j=j+1 Else j=j-1
EndIf
Next
Loop Until j=z
'表示
j=1
For i=x To y
If Flag(i)Then
ActiveSheet.Cells(j,1).Value=i
j=j+1
EndIf
Next
End Sub
647デフォルトの名無しさん:2014/03/05(水) 07:35:56.11
http:〃20m.ziploader.net/dl.phpx?id=ziploader2062
★zipファイルの「阪神近鉄無」フォルダー以下
「平成25年12月」「平成25年11月」の数値未発表で一部合計値比較不可能の為
 平成25年10月〜平成13年4月は以下路線の各駅を合計・増減から除外して再計算。
 「阪神」─「本線」「なんば線」
 「近鉄」─「難波線」「大阪線」「南大阪線」
★zipファイルの「阪神近鉄有」フォルダー以下
 除外せず、「平成25年12月」「平成25年11月」の未発表数値を前年同月と同一と仮定
648デフォルトの名無しさん:2014/03/06(木) 23:19:40.48
質問させていただきます。

B600に関数が入っていて
B601には空白です。
B602にも関数が入っていて
B603は空白です。

こんな感じで、Bの1700行まで関数が一行置きに入っているのですが、セルの結合を二行ずつしたいと思っています。
どういう風な記述になりますでしょうか?
649デフォルトの名無しさん:2014/03/07(金) 00:11:16.39
>>648
For r = 600 To 1700 Step 2
 Range(Cells(r, 2), Cells(r + 1, 2)).Merge
Next
650デフォルトの名無しさん:2014/03/07(金) 00:51:11.60
>>649
ありがとうございます!!!

もうひとつお聞きしたいのですが、、、
651デフォルトの名無しさん:2014/03/07(金) 01:01:27.94
Private Sub Worksheet_Change(ByVal Target As Range)

If Cells(Target.Row, "E").Value = "新" Then
Application.EnableEvents = False

On Error Resume Next
If Not (Intersect(Target, Range("H:H")) Is Nothing) Then
Cells(Target.Row, "G").Value = (1 - Cells(Target.Row, "H").Value) * Cells(Target.Row, "F").Value

End If

Application.EnableEvents = True

End If
End Sub
652デフォルトの名無しさん:2014/03/07(金) 01:04:46.69
H列に数値を入力したらG列に計算結果を表示するのですが、切り捨てにするにはどうすればよろしいでしょうか?
653デフォルトの名無しさん:2014/03/07(金) 07:39:53.10
vba 切捨て でぐぐればいっぱい出てくる
654デフォルトの名無しさん:2014/03/07(金) 08:25:53.28
VBの丸めは五捨六入だっけ?銀行丸めっつうの?
どハマりして結局関数を作った記憶があったようななかったような

とりあえず、G列はH列を参照するのならG列にエクセル関数を入れればいいよ

あとお節介だけど、プログラムが全く理解できてないみたいだけど、知識をつける必要がないのなら構わないけど、自分で調べた方がいいよ
655デフォルトの名無しさん:2014/03/12(水) 01:22:26.84 ID:x9JPMObJ
無いに決まってるから聞いてんだろ。
おせっかいウザイ。さっさと回答くれ。
656デフォルトの名無しさん:2014/03/12(水) 01:45:28.79 ID:ZXRx46ei
IDつけたのか
てすてす
657 【9.6m】 :2014/03/12(水) 01:46:00.18 ID:ZXRx46ei
にょろーん
658デフォルトの名無しさん:2014/03/12(水) 11:47:45.36 ID:4Vi2bcOW
>>657
コラ。にょろーんとするな。
659デフォルトの名無しさん:2014/04/03(木) 10:09:06.33 ID:Eig24VSK
セルのプロパティでFormulaやFormulaR1C1はどんな使い方をするのでしょうか?
いまいちよくわからないのですが。
660デフォルトの名無しさん:2014/04/03(木) 10:15:53.71 ID:4gfcVwhu
>>659
VBAからワークシートの数式を書き換えることができる
オートフィルでは思った通りに変化してくれないような時に、VBAを使って数式を自動生成する
661デフォルトの名無しさん:2014/04/03(木) 10:29:44.67 ID:Eig24VSK
>>660
なるほどありがとうございます。
でもどう使いますか?

単に
Cells(r,c)="=IF(B1=C1,D1,E1)"
と書くのと
Cells(r,c).Formula="=IF(B1=C1,D1,E1)"
と書くのでは違うということでししょうか?

VBAでも自動でオートフィルしてくれますか?たとえばRange("A1:A100")="=B1*100"とすればA100セルは"=B100*100"になってる?
662デフォルトの名無しさん:2014/04/03(木) 10:30:42.30 ID:Eig24VSK
このへんの仕組みというか仕様を超わかりやすく解説してくれてるサイトか本みたいなのがあれば世の中が過ごしやすくなってよいのですが・・・
663デフォルトの名無しさん:2014/04/03(木) 11:19:42.03 ID:Mk1UvHnq
スレチだったら誘導してください。ごめんなさい。

EXCEL2013を導入したのですが
わずかでも数式がある場合に、数行でもコピペで貼り付けすると
再計算(プロセッサ4個):N%などと、時間がかかるのですが、解決方法はありますか?

検索で調べてみても、過去情報ばかりでヒットできません。
環境の問題では無いと思ってるのですが、必要であれば指示してください。
664デフォルトの名無しさん:2014/04/03(木) 11:23:35.99 ID:Mk1UvHnq
連投すみません。

Workbooks(".xlsm").Activateですが、SDIの影響でWorkbook_Openに記述してもうまく機能しません。
情報はいくつか検索できましたが、解決していないように見えます。
いい方法ありますか?
665デフォルトの名無しさん:2014/04/03(木) 11:49:55.12 ID:4gfcVwhu
>>661
その例では混乱することは少ないだろうけど、数式が文字列変数に入っていた場合は
あとでコードを見返した時にセルに何を入れているのかわからなくなる可能性があるので
プロパティは省略すべきではない

また、逆にセルから数式を読み出したい時はプロパティを省略できない
666デフォルトの名無しさん:2014/04/03(木) 12:42:08.56 ID:Eig24VSK
>>665
それは
myVal=Cells(r,c).Formula="=IF(B1=C1,D1,E1)"
または
myVal=Cells(r,c).FormulaR1C1="=IF(B1=C1,D1,E1)"
で代入した場合には
変数の型は必ず文字列であり内容も文字列ということですか?
667デフォルトの名無しさん:2014/04/03(木) 13:19:19.03 ID:4gfcVwhu
>>666
質問の意味が不明
それからコードがおかしい
それではmyValにBoolean型が代入されてしまう
正しくは

myVal = "=IF(B1=C1,D1,E1)"
Cells(r, c).Formula = myVal

など
myValはString型
668デフォルトの名無しさん:2014/04/03(木) 14:10:31.38 ID:Eig24VSK
>>667
あ、式はたしかに=が2つあって間違ってました。

でも

------------------------------
Sub Unko()
myVal = "=IF(B1=C1,D1,E1)"
ActiveCell.Formula = myVal
Debug.Print ActiveCell.NumberFormat
End Sub
------------------------------

これで試してみると
文字書式はgeneralとでるよ。@じゃなくて。
669デフォルトの名無しさん:2014/04/03(木) 15:59:16.02 ID:4gfcVwhu
>>668
根本的にわかってない
セルの書式と代入する値の型は無関係
それから下品な名前は使うな
俺はそういうのが嫌いだからもう教えない
670デフォルトの名無しさん:2014/04/03(木) 16:16:33.02 ID:Eig24VSK
(^ _ ^)
671デフォルトの名無しさん:2014/04/05(土) 20:03:54.99 ID:eYN2DOjD
VBAをVBE以外で書きたいんですけれども、誰かVBE以外のエディターで開発されてる方いますか?
いる方は、何をお使いになってますか?

VBEで以下の不満があり、関数のアウトライン機能がないこと、列挙体変数をTabで選択せずそのまま入力するとその入力された変数名に変更されてしまうなどがあり、困ってます
672デフォルトの名無しさん:2014/04/05(土) 20:52:49.41 ID:vxn3S8/H
>>671
VisualStudioのVBのエディターで書いてからコピペとかたまにやるけど常用はしてない
普段は普通のテキストエディター
673デフォルトの名無しさん:2014/04/06(日) 00:14:11.80 ID:6QPkQ4Uq
>>672
なるほど、確かにVSのアウトライン機能は便利ですもんね…
でもアウトライン機能を常用出来るようなテキストエディタはやはりないんですかね
ありがとうございます。
674デフォルトの名無しさん:2014/04/06(日) 20:31:36.34 ID:SRPo3hu2
arduinoからのシリアルデータをexcelに自動で書き込んでくれるvba作ったのですが
なぜか途中で入力セルが勝手に変えられてしまいます

MSComm1.InputMode = comInputModeText
rdat = MSComm1.Input2
Sheet3.Cells(InputRow, 11) = rdat //シリアルデータをセルに入力
InputRow = InputRow + 1

1023,964
と入力されるべきところになぜか
1
23,964
とか
12
3964
になってしまいます

似たような方いらっしゃらないでしょうか
675デフォルトの名無しさん:2014/04/06(日) 21:05:33.20 ID:X8q2hYwd
>>674
オーバーランしてるんじゃねーのか?
まずは、Debug.Print rdat して、読み取りがおかしいのか、セルが書き変わってるのか切り分けなよ。
676デフォルトの名無しさん:2014/04/06(日) 21:38:35.38 ID:SRPo3hu2
>>675
イミディエイトには
511,476
511,476
5
11,476
となってるので読取がおかしくなっているようです
677デフォルトの名無しさん:2014/04/07(月) 00:32:05.86 ID:6QjlBT3T
MSComm1.InputMode = comInputModeText
rdat = MSComm1.Input2
Debug.Print rdat
を実行した結果が↓のようになりました

510,475,442,413,392,379,337,325であるべきところが
510,
475,442,413,392,379,337,325
となってしまいます
いつも起きてるわけではなく9割ぐらいがこうなります
送られてくるデータは最大40文字の文字列なのでStringの容量からはみ出ることはないのですが・・・

rdatからReplaceを使ってvbCrやvbLfを置換しても文字列の改行はなくなりませんでした・・・
これはもうMSCommの仕様でしょうか
678デフォルトの名無しさん:2014/04/07(月) 01:09:45.66 ID:cIwL+5uV
>>677
バイナリで改行コードをチェック
679デフォルトの名無しさん:2014/04/07(月) 18:12:05.76 ID:NRYmRN39
バイナリで保存してみたところ中身に改行コードはありませんでしたが
テキストファイルで保存すると改行されています
680デフォルトの名無しさん:2014/04/07(月) 19:44:01.79 ID:cIwL+5uV
改行される部分に改行以外の何かのデータが入ってない?
文字列の先頭から文字コードを順番に表示させてみ
681デフォルトの名無しさん:2014/04/09(水) 02:10:23.95 ID:Zgg01Tu3
IIF(data=0, 0, 1/data)
dataが0だとエラーになります。回避するには大人しくIf elseにするくらいしかないですか?
682デフォルトの名無しさん:2014/04/09(水) 02:48:42.35 ID:rPGWVgOi
>>681
回避する方法はほかにもある
たとえばOn Errorとか、IIfの入れ子とか
Ifで書く場合もElseは必須じゃないし
683デフォルトの名無しさん:2014/04/09(水) 02:59:54.43 ID:BMFTF5hJ
>>681
VBAはショートサーキットしないから、素直にIFネストしといたら良いんじゃね
セルに計算式埋め込んでIfErrorとかIsErrorとか使えば何とかなるかもしれんが
684デフォルトの名無しさん:2014/04/09(水) 03:30:52.75 ID:rPGWVgOi
>>683
今回のIIfのエラーとショートサーキットは関係ない
IIfは単なる関数だから、呼び出し前にすべての引数が評価されるだけのこと
685デフォルトの名無しさん:2014/04/09(水) 04:08:35.13 ID:Zgg01Tu3
レスありがとうございます。
IIFの入れ子だけでエラー回避出来るんですか?思いつかないです。ヒント下さい。
686デフォルトの名無しさん:2014/04/09(水) 04:18:43.85 ID:rPGWVgOi
>>685
ヒントは>>684
IIfは関数だってこと

まず機能限定でいいからIIf関数を自分で作ってみ
687デフォルトの名無しさん:2014/04/09(水) 05:58:06.04 ID:eVaBF0ya
>>681
0除算の時どうしたいかによるけど、
1/dataの部分を、たとえば
dataが0なら0を返却する様な
関数をかませる方法もあるよ。
ただ、
処理の遅いiifをそこまでして使うほどのメリットを感じないけど。
688デフォルトの名無しさん:2014/04/09(水) 17:55:19.77 ID:rPGWVgOi
>>687
元の質問>>681によると、data=0の時は結果も0にしたいようだ
俺も素直にIfで書いた方がいいと思うけどな
689デフォルトの名無しさん:2014/04/11(金) 12:28:29.65 ID:yZ8wKwaw
sheet1にボタン1を配置したんですがボタン1_click()を標準モジュールではなくsheet1のシートモジュールとして書くことは出来ないのでしょうか?
690デフォルトの名無しさん:2014/04/11(金) 14:48:21.85 ID:z4/PIhu7
>>689
Sheet1モジュールに Sub ボタン1_click() を書いてボタンに登録
Privateにしたければボタンに登録後に Private Sub ボタン1_click() と Private を追加しておく。

またはSheet1モジュールに Private Sub ボタン1_click() を書いてからボタンのマクロ名に「Sheet1.ボタン1_click」と手書きする
691デフォルトの名無しさん:2014/04/15(火) 04:16:36.29 ID:A/HjwMLt
モジュールレベル変数やプロシージャレベルのstatic変数をリセットするため
マクロが実行終了してもモジュールがリセットされない限り値が残っているので
強制的にモジュールをリセットしたいです。どうすれば良いですか?
692デフォルトの名無しさん:2014/04/15(火) 06:26:32.57 ID:rPikCPob
>>691
Excelを再起動するか、変数を初期化するためのプロシージャを用意する
693デフォルトの名無しさん:2014/04/15(火) 10:36:04.14 ID:5oqUCn8p
プロシージャレベルのstatic変数って
なんのために/どういうときに、使うんですか?
694デフォルトの名無しさん:2014/04/15(火) 11:37:46.86 ID:9lgaoMnA
>>693
スコープはそのプロシジャでいいが、寿命がプロシジャと同じでは困る時
たとえばそのプロシジャが呼ばれた回数を数えるときとか便利
695デフォルトの名無しさん:2014/04/15(火) 11:53:56.64 ID:5oqUCn8p
>>694
それならstaticとか変な概念を1つ導入するなんてことはせず
モジュールレベルの変数を使ったら良くないですか?

マッチ1本火事のもと。
あたらしい概念の導入は混乱のもと。
696デフォルトの名無しさん:2014/04/15(火) 12:47:45.68 ID:rPikCPob
>>695
新しい物に順応できないジジイは死ぬまでアセンブラだけ使っててくだちい
697デフォルトの名無しさん:2014/04/15(火) 13:41:44.59 ID:9lgaoMnA
新しい概念って
static変数はVBがオブジェクト指向になる以前からあるんだがな
698デフォルトの名無しさん:2014/04/15(火) 14:08:55.72 ID:s8o/Oo49
別なエクセル立ち上げて操作すると動作がおかしくなるvbaなんか糞だろ
699デフォルトの名無しさん:2014/04/15(火) 16:22:28.15 ID:820VGCAb
じゃ、使わなければいいじゃん
700デフォルトの名無しさん:2014/04/15(火) 16:26:47.79 ID:rPikCPob
欠点のない言語、環境なんて存在しないのにね
叩きたいだけだろ
701デフォルトの名無しさん:2014/04/15(火) 23:40:57.35 ID:Qecud56U
メソッド内のstaticなんて
C++にはあるけどJavaにもC#にも無いんだから
むしろ時代遅れの概念だろ。
702デフォルトの名無しさん:2014/04/16(水) 04:06:05.87 ID:LmxlsNa2
>>692
「このアクションを実行するとプロジェクトがリセットされます。実行しますか ?」
このメッセージが出るようなコードを最初に強制的に行いたいのですが出来ませんかね。

>>693
再帰のときとかに使ってます。
703デフォルトの名無しさん:2014/04/16(水) 08:30:53.84 ID:C8nNiAQg
>>701
> C++にはあるけどJavaにもC#にも無い

バカには使いこなせないということ (w
704デフォルトの名無しさん:2014/04/16(水) 12:19:39.65 ID:XF2c1vIX
>>702
プロジェクトをリセットする方法は色々ある
基本的なことはここを参考に
http://www.moug.net/tech/exvba/0150116.html
705デフォルトの名無しさん:2014/04/16(水) 23:01:53.26 ID:2LoKKqcV
>http://www.moug.net/tech/exvba/0150116.html
>モジュールレベル変数の値が消えるとき

パブリック変数にしてた文字列が消えていたのはこのせいだったのかよーー
706デフォルトの名無しさん:2014/04/17(木) 01:26:29.86 ID:hQgHTHar
ふと思ったんだけどさ、
Staticな変数ってクラスモジュールの
プロシージャで使ったらどんな動きするんだろ。
インスタンスごとに別々に用意されるのか、
それとも同じクラスで生成されたインスタンスのは参照先が同じになるのか。
後者だったら何か新たな使い道が生まれそうだけど、
それはそれでまた混乱の素になりそう。
707デフォルトの名無しさん:2014/04/17(木) 01:55:46.12 ID:oM/c/OYP
>>705
それはプライベットだぞ。
パブリックじゃないぞ。

というわけで、標準モジュールでの
プライベット変数とパブリック変数の
その使い方と使い分けや、注意すべきこと、どういうときにどれを使うかなど
その使用方法について詳しく教えていただけないでしょうか?
708デフォルトの名無しさん:2014/04/17(木) 02:24:20.93 ID:jEbNeAxo
2回書いてるからミスタイプじゃなくて間違えて覚えてるパティーンか
709デフォルトの名無しさん:2014/04/17(木) 03:33:46.78 ID:fX81VMtB
>>704
>既存の標準モジュールやUserFormを解放(削除)すると、確認メッセージは表示されずにモジュールレベル変数の値がクリアされます。

そのページで手動ではない方法で実現出来そうなのは
実際には使わないダミーのモジュールをインポート後、すぐエクスポートしてプロジェクトをリセットするくらいですかね?
どうもありがとうございました。
710デフォルトの名無しさん:2014/04/17(木) 03:43:12.52 ID:fX81VMtB
エクスポートじゃなくて解放でした。
711デフォルトの名無しさん:2014/04/17(木) 14:24:23.33 ID:oM/c/OYP
上記のことを総合判断するに
VBAで複雑なプログラミングをするときは
グローバル変数は使わずにどこかのセルに値を保存しておいたほうがよいということで
ファイナル認識でokか?
712デフォルトの名無しさん:2014/04/17(木) 15:57:50.88 ID:jEbNeAxo
複雑なプログラムはVBAじゃなくて、せめてVBを使っといた方が、開発効率、処理効率、いずれも上
713デフォルトの名無しさん:2014/04/17(木) 16:50:13.82 ID:oM/c/OYP
じゃ
上記のことを総合判断するに
VBで複雑なプログラミングをするときは
グローバル変数はちゃんとリセットされずに値は保存されたまま使えるということで
ファイナル認識でokか?
714デフォルトの名無しさん:2014/04/17(木) 18:10:20.16 ID:f4TQPtNf
vbaでopenofficeエクセルの出力出来ませんか?
715デフォルトの名無しさん:2014/04/17(木) 19:03:25.75 ID:GGrT4rnZ
openofficeエクセル

↑何これ?
716デフォルトの名無しさん:2014/04/17(木) 23:11:26.77 ID:K2VamZAF
GNU Public Excelのことじゃないの?
717デフォルトの名無しさん:2014/04/18(金) 18:57:42.82 ID:P9dU51g+
openofficeエクセルの出力 ってどういう事?
718デフォルトの名無しさん:2014/04/18(金) 20:27:06.81 ID:pSxMtBxF
office2007以降のxml形式だろ
719デフォルトの名無しさん:2014/04/20(日) 10:29:25.89 ID:LlR3PaQL
仕事でVBAつこてます。

コードを書いてるときや編集してるとき
画面が狭くモニターがあと縦横2倍、面積4倍くらい以上に大きくしてほしいとよく思います。

こんなとき役に立つツールみたいなのはないですか?
720デフォルトの名無しさん:2014/04/20(日) 11:23:23.90 ID:DYddObWG
マルチモニタで表示
721デフォルトの名無しさん:2014/04/20(日) 11:52:54.77 ID:YSeiuWKu
>>719
仮想デスクトップか。表示域そのものを広げたいなら、
モニタ買い替え又はどこかからモニタを調達してきて>>720

VBAでどうこうできる問題ではないと思う。
722デフォルトの名無しさん:2014/04/20(日) 13:42:35.59 ID:kzevG+UG
>>719
表示される行数、文字数を増やすには、画面を大きくするか字を小さくするしかない
どっちがお望み?

画面を大きくするにはモニターの買い換えか増設、ソフトでやるなら仮想デスクトップ
字を小さくするのは画面のプロパティをいじったり設定でモニターのdpiを上げたりVBEのフォントを変えたり
http://www.max.hi-ho.ne.jp/happy/YNxv1.html
テキストエディタを使ったり
723デフォルトの名無しさん:2014/04/21(月) 00:23:00.62 ID:+JF1MRhA
長いコード(500行以上)があって、可読性・メンテナンス性をあげるために、5つくらいのサブルーチンへの細分化を試みています。

つまり大元のSub Testの中を、
Test_Sub1、Test_Sub2、Test_Sub3、Test_Sub4、Test_Sub5くらいの5つの部分に分けるみたいな感じです。

しかしここで問題が。

Test_Sub1に分けても、大元のTestで宣言した変数がこのTest_Sub1の中でたくさん使われています。
改めてこのTest_Sub1内で変数を宣言すると
大元の変数とは全く関連のない新しい独立した変数とみなされますよね?
そうするとコードを分割して可読性・メンテナンス性を良くするのって不可能じゃないですか?

みなさんはこのへんはどうやってやってるんでしょうか?
724デフォルトの名無しさん:2014/04/21(月) 00:36:42.27 ID:UsKDZ0RZ
>>723
それは元の設計とか分け方が悪い
Sub1、Sub2なんて名前の付け方からしておかしい

きちんと機能ごとに分けて、処理内容がわかるような名前を付ける
機能が限定されれば必要な変数も限られるから、最小限の変数だけをプロシージャの引数として渡すようにする
725デフォルトの名無しさん:2014/04/21(月) 00:48:02.52 ID:+JF1MRhA
名前は仮としてここで出しただけで
当然ほんものは役割にちなんだ名前になってるよ。

やっぱり「最小限の変数だけをプロシージャの引数として渡す」というのが回答なんですね。
そんな気がしてたんだわ。

でもいまから改造するとしたら
もうすでに人間の内臓と血管と骨のように
変数やらなんやらが複雑に入り組んでるので
なにかすこしでも改変しようとすると
人間のたとえでは大出血で死亡してしまうように
コードでエラーが出まくったり全く意図してない動きをしそうですわ。

こういうようにならないようにするためには
ふだんからどういうコードを書くように心がけたらいいですか?
726デフォルトの名無しさん:2014/04/21(月) 01:01:29.41 ID:UsKDZ0RZ
>>725
普段からモジュールを小さく分けて変数のスコープも最小限にする
727デフォルトの名無しさん:2014/04/21(月) 01:09:39.31 ID:UsKDZ0RZ
>>725
コメントを入れたくなったら、その部分はプロシージャに分ける

っていうのは初心者にはわかりづらいかなあ
中級者になってくると「ここにはコメントを入れよう」って思うタイミングが必ず出てくるんだよね
経験上、コメントを入れておかないとあとで保守するのが大変になるぞ、って部分が
だんだんわかるようになってくる
そういう処理はプロシージャとして別にしておいた方が保守性が上がることが多い
728デフォルトの名無しさん:2014/04/21(月) 08:41:09.76 ID:Q9CWt8FH
>>726
ホントこれに尽きるよね。
729デフォルトの名無しさん:2014/04/22(火) 01:28:33.70 ID:DlZvN0RF
>>723
プロパティだけのクラス作ってそれを引数で渡せば最小限の引数で済むけど、
そもそも最初にどうすれば使い回しがきいて
且つ修正する時に他に影響を与えることなく
出来るだけ手を入れないような組み方が出来るか考えながら組まないと。
たまにデザインパターンの本とか読んでおけば少しは役に立つかもよ。
730デフォルトの名無しさん:2014/04/22(火) 09:49:30.62 ID:xWC4qOoO
>>729
デザインパターンの本とはどういう本ですか?
本当にプログラミングに関係する本ですか?
731デフォルトの名無しさん:2014/04/22(火) 10:03:28.89 ID:W0hXuU4O
疑問に思ったら人に聞く前に自分で調べようぜ

http://e-words.jp/w/E38387E382B6E382A4E383B3E38391E382BFE383BCE383B3.html
デザインパターン 【 design pattern 】

プログラム設計時に起こる典型的な問題とそれに対する解決策を整理し、再利用できるようにまとめたもの。
1995年に出版された書籍「デザインパターン」の中で23のパターンが解説されたのをきっかけに広まった。
ソフトウェアを設計していると、多くのソフトウェアが共通して持っている機能や問題があることに気づくことがある。
それらの問題を解決するために毎回0から設計していては効率が悪いため、多くのプログラマは経験を積むうちに
「こういった問題を解決するには、こういう構造のプログラムを書けばいい」というノウハウを蓄えていくことになる。
それらのノウハウを他人が参照できるように明示的に整理したものがデザインパターンである。

問題と解決策とを一組として、「Stateパターン」などそれぞれに名前が付けられる。オブジェクト指向とパターン化との
相性がいいためか、オブジェクト指向プログラミングの分野で用いられることが多い。
732デフォルトの名無しさん:2014/04/22(火) 10:03:51.12 ID:o3KBIfuW
個人的にはデザパタをベースにしてリファクタリングでアジャイルに攻めて行くのが良いと思う。
何か一昔前の流行り言葉を並べただけの厨ニ病的発言に見えるけどマジオススメ。

でも、リファクタリングに関する本て無くなっちゃったよね。
733デフォルトの名無しさん:2014/04/22(火) 11:41:19.93 ID:z8WHMXPV
まさかExcel VBAのスレでデザパタを勧める奴を見るとは
734デフォルトの名無しさん:2014/04/22(火) 11:48:32.57 ID:Edo2b+/a
デザパタなんて、少なくともGOFのパターンのほとんどは時代遅れの設計で、
所詮はOOP初心者へのお勉強向けのものなんだから、
丁度いいくらいなんでないの。
735デフォルトの名無しさん:2014/04/22(火) 12:55:30.89 ID:z8WHMXPV
ムダに柔軟性の高い汎用言語のためのもの
736デフォルトの名無しさん:2014/04/22(火) 13:47:36.00 ID:0UJjYfLY
UFC 128 - : ジョン・ジョーンズ vs. マウリシオ・ショーグン
https://www.youtube.com/watch?v=wia_sFsAf6g
737デフォルトの名無しさん:2014/04/22(火) 14:57:43.47 ID:QveWaMVI
public declare function hoge "dll" (byval a as long) as long

とあるときに
引数 a に byval が付いてるときと付いてないときで動作は変わらないのですか?
あと関数そのものの戻り値にも byval とか byref とか書きたいのですが
どこに書けばよいのかわかりません ><
738デフォルトの名無しさん:2014/04/22(火) 17:16:32.90 ID:DwFEDI7c
>>734
近代的なデザパタってあるの?
739デフォルトの名無しさん:2014/04/22(火) 23:10:43.79 ID:VyvjcPd+
>>737
> 引数 a に byval が付いてるときと付いてないときで動作は変わらないのですか?

変わる。

> あと関数そのものの戻り値にも byval とか byref とか書きたいのですが

なんのために?
書くだけなら適当に戻り値の型名の前辺りに書けばいい
740デフォルトの名無しさん:2014/04/23(水) 00:49:20.82 ID:ZM+hJQpr
関数の戻り値にValもRefもないだろ
741デフォルトの名無しさん:2014/04/23(水) 07:39:11.68 ID:gw4Yr7wD
vb虫はポインタを理解できなあい
742デフォルトの名無しさん:2014/04/23(水) 08:03:24.27 ID:Ce2w8hBu
ポインタってなにが難しいのよ?
単に変数のアドレスってだけだろ?

・概念が分かりづらい
・難易度が高い
・これで挫折した人多数

こんな評判ばかりが先行して覚悟して勉強し始めたけど
単に変数のアドレスってだけで全然難しくないじゃないか。
743デフォルトの名無しさん:2014/04/23(水) 08:17:33.81 ID:x9LZX8vX
C++ だと普通にあるから、VBA にあってもおかしくないが、まあ使う機会があまりないわな
744デフォルトの名無しさん:2014/04/23(水) 08:18:54.85 ID:x9LZX8vX
>>743>>740 へのレスな
745デフォルトの名無しさん:2014/04/23(水) 08:35:15.29 ID:jWa014pD
>>742
その「アドレス」がわからないやつがいるんだよ
CPUやメモリの仕組みなんて知らなくても、マクロの記録とコピペさえ覚えりゃなんとなく動く物ができちゃうし
独学で参考書を拾い読みしかしてないと2進数16進数も知らなかったりする
746デフォルトの名無しさん:2014/04/23(水) 10:29:13.37 ID:6DXUFUqF
>>742
思い通り動かなかったときに「これはポインタ様の仕業じゃ!」と特定できる経験値があれば問題ない
747デフォルトの名無しさん:2014/04/23(水) 12:39:28.71 ID:+BZatqFA
ポインタのポインタとか
748デフォルトの名無しさん:2014/04/23(水) 13:00:46.08 ID:x9LZX8vX
>>742
> ポインタってなにが難しいのよ?

使うのが難しい、と言うか面倒なんだよ。
ポインタ自体とそれが指す先の両方を意識しないといけないから。
まあ、C++ ならテンプレートライブラリでだいぶ改善されたけど。
749デフォルトの名無しさん:2014/04/23(水) 13:09:46.59 ID:6DXUFUqF
そもそもCが罠だらけで綱渡りを強いるクソ言語であるという前提があって
その現実をはっきりくっきり突きつける役目をポインタが担っているというだけ
750デフォルトの名無しさん:2014/04/23(水) 13:13:16.20 ID:ZM+hJQpr
Cの悪口は言い始めたらキリがないし、何よりスレチだ
751デフォルトの名無しさん:2014/04/23(水) 23:58:36.04 ID:jVwNMIQL
ポインタってC#になった時に淘汰されたあの機能?
752デフォルトの名無しさん:2014/04/24(木) 14:00:15.27 ID:ZALVHb/C
例えばですよ、みなさん。

500行以上の長文コードがあって
その中には当然のことながらCells( X , Y )のようにCellsプロパティでセルの場所を指定してる箇所が大量にあります。
でもシートの行なり列なりを丸ごと削除するとします。
すると当然Cells( X , Y )で指定してた箇所は影響される箇所はすべて変更しなきゃならないじゃないですか?

こういう作業はどうやってやります?
まさか1つ1つ手作業でやるわけにはいかないでしょう。
ツールやいい方法はありますか・
753752:2014/04/24(木) 14:02:04.53 ID:ZALVHb/C
例えば
1行消したら影響されるところだけRow座標を-1にずらさないといけないし
1列消したら影響されるところだけColumn座標を-1にずらさないといけないし
という意味。
754デフォルトの名無しさん:2014/04/24(木) 18:02:51.70 ID:NeL4TUu8
>>752
その例でいけばCells( X , Y )を使う全ての個所が影響を受けるわけではなく
X,Yに値を設定してるところだけが影響を受けるということも考えられるが
その場合は、X,Yに直接値を指定するのではなく、定数や設定から読み込むようにしておく
そうすればその定数や設定を変えるだけで済む

プログラム作る時に、そう言う(シートの行や列がずれる)事を考慮して、
その場合でも1か所直せば対応できるように作る

エクセルに限った話でいくなら、セル(範囲)に名前つけてその名前でアクセスするとかもあるけど
755デフォルトの名無しさん:2014/04/24(木) 18:33:28.46 ID:ZALVHb/C
>>754
なるほど予防は分かりました。
これからはそうします。

ではもうすでにそういうコードをつくってあって
それを今後のメンテナンス性も考慮して
これを機会にすべてのCells( X , Y )を作り変えることにした場合
それを効率良く確実にしかも正確にすばやくやるにはどうしたらいいでしょうか?
756デフォルトの名無しさん:2014/04/24(木) 19:33:04.48 ID:pR4axH5T
外注
757デフォルトの名無しさん:2014/04/24(木) 19:36:00.94 ID:ZALVHb/C
外注先はどうやって処理しますか?
758デフォルトの名無しさん:2014/04/24(木) 19:42:02.91 ID:nXU9pvpI
実際のコードを見て臨機応変にやる
759デフォルトの名無しさん:2014/04/24(木) 22:08:50.86 ID:jL+soUD3
>>742
禿同、全く難しくもない。
昔はBasicですらアドレス意識しないと書けなかった
型すら難しいとか言ってるゆとりが出てきてビビるわ
760デフォルトの名無しさん:2014/04/24(木) 22:47:29.72 ID:nXU9pvpI
俺はN-BASICから使ってきてるけど、BASICにアドレスが必須の時代なんてあったっけ?
761デフォルトの名無しさん:2014/04/24(木) 23:37:36.94 ID:Nchd47HC
まー必須ではないけどさ

でもN-BASICとか使ってたなら、
絵動かしたり無理矢理音楽奏でたかったりするときは必須だったかな。
当時はOSという概念もなくて直でハードの機能使うことが多かったから
アドレスとか番地とか言われたとき、何のことか瞬時に分かる人多いよね。
もう間違いなくじじいだけれど。
762デフォルトの名無しさん:2014/04/25(金) 00:17:31.54 ID:97MfQF5y
そら処理速度が足りなくてマシン語使ったり、BASICにない機能をROM内ルーチンで補ったりとかやったけど、
そういう意味で言ってるのなら>>759の書き方には違和感を覚える

単に昔はそういう予備知識も必要だったってだけで、BASICそのものの言語仕様とはほとんど関係ないしね
763デフォルトの名無しさん:2014/04/25(金) 00:45:07.04 ID:G8DiTS3X
昔のBASICにはPEEK,POKEって命令があったな
まあ、それ以外にアドレス意識する命令は知らないが
764デフォルトの名無しさん:2014/04/25(金) 00:55:38.91 ID:97MfQF5y
N-BASICからあったのはIN、OUT、CALL
N88で追加されたのがVALPTR
ほかにもあったような気がするけど、思い出せん
765デフォルトの名無しさん:2014/04/25(金) 01:10:49.24 ID:rO2W6PbI
「DUSTMAN」 - 何とか庵日誌
http://d.hatena.ne.jp/fukenko/20130916
766デフォルトの名無しさん:2014/04/25(金) 08:31:05.76 ID:b5ACRTEI
VRAMのアドレス分かってないと糞トロくて話にならんかったろ?
767デフォルトの名無しさん:2014/04/25(金) 10:26:45.88 ID:CzawWySK
VBAからWebページを操作したいとき
タブブラウザ使ってるときの各タブってどうやって指定するのです?
768デフォルトの名無しさん:2014/04/25(金) 12:24:40.84 ID:CzawWySK
自作関数で引数がたくさんある時
呼び出すときにメソッドみたいにunko:=20, manko:=30みたいにして残りの指定しなかったものはデフォルト値を設定したいとき
そのデフォルト値の設定も含めてどうやればいいですか?
769デフォルトの名無しさん:2014/04/25(金) 13:11:16.38 ID:8Eh10mjw
>>768
Optional
770デフォルトの名無しさん:2014/04/25(金) 13:24:00.47 ID:CzawWySK
引数の名前のつけかたは?(unko, mankoのような)
771デフォルトの名無しさん:2014/04/25(金) 14:34:17.80 ID:CzawWySK
セルの値がある条件のときに黄色く塗るというSubを作っています。

このとき、
(1) そのセルをobjectとして引数でSunに渡す (Sunの中ではobjectをいじって調べる)
(2) そのセルをアクティベートして引数なしでSubに渡す(Subの中ではActivecellを調べる)
どちらが好ましいですか?

とくに似たような状況のときアクティベートしたくないときが多々ありますがそんなときは(1)しか方法はないのでしょうか?

(単純化して質問しましたが実際はもうちょっと複雑ですが)
772デフォルトの名無しさん:2014/04/25(金) 20:22:52.70 ID:97MfQF5y
>>771
普通はRangeオブジェクトを引数として渡す
773デフォルトの名無しさん:2014/04/25(金) 21:16:58.96 ID:yqP+DIa+
>>771
もちろんどちらがいいかと言えば(1)。
一々Activateを調べるとか訳わからない。
CellをObjectとして引数でって言うのも、どうやるつもり?
Rangeオブジェクトを引数で渡す方法もあるけど、
前レスにあった、出来るだけ今後のことを考えるなら、
最初はちょっとこった作りが必要。
774デフォルトの名無しさん:2014/04/25(金) 21:26:39.19 ID:CzawWySK
>>772-773
屁〜、じゃあそうします

>>773
こった作りとはなんですか?
775デフォルトの名無しさん:2014/04/25(金) 22:08:42.21 ID:yqP+DIa+
>>774
たとえばだけど、
まず、Cell情報クラスを作ります。
これはセルの位置情報を抱えておいて、
A1形式、R1C1形式のどちらでも設定出来て、
どちらの形式からでも引き出せるようにしておきます。たとえばString型の"A2"をしまったら
Long型の2と1を引き出せる様に。

次にRange情報クラスを作ります。
今度はRangeオブジェクトを貰ったら、その左上と右下の情報を上記のCell情報クラスに抱えたり、取り出したり、
そのCell情報クラスの情報からRangeオブジェクトを取り出したり出来る様にします。

更に上位のクラスとして、ブックやシートを保持してCell情報クラスやRange情報クラスから
位置情報を取得して、どのブックのどのシートの、
どのセルや範囲を処理対象にするのかを取り出せるクラスを作ります。

後は取り出した情報からどうにでも弄ればいいです。

こんな感じでこまごまと部品化しておけば、
次回違うプログラムを作る時も、その部品を使えばいいので楽です。
776デフォルトの名無しさん:2014/04/25(金) 22:37:19.84 ID:G8DiTS3X
それRangeクラスとどう違うんだか
777デフォルトの名無しさん:2014/04/25(金) 22:57:46.98 ID:yqP+DIa+
>>776
まずブックの情報を抱えられるところから違う。
クラス内で抱えるから引数で渡す時もクラス一つですむ。
クラス内の処理は隠蔽化出来る
ので、一々外でこねくり回しながら
後で使い回しのきかないロジックにならなくて済む。
778デフォルトの名無しさん:2014/04/25(金) 23:43:25.53 ID:G8DiTS3X
ブックの情報はParentたどっていけば取れるんじゃないかな

Range継承して独自処理追加したクラス作るって考え方はあるが
VBAでそれが良いやり方かと言うと、VBAで継承は....

Rangeを内包するクラスを作ることを否定はしないが
すくなくともその例のRange情報クラスとかCell情報クラスとかはないんじゃない

データの引きまわしにクラス使う事も否定しないが、クラス内の処理が隠蔽できることと
引数にクラス渡す事はあんまり関係がない
779デフォルトの名無しさん:2014/04/25(金) 23:59:24.15 ID:m8ZXioec
http:〃20m.ziploader.net/dl.phpx?id=ziploader2209
★zipファイルの「阪神無」ディレクトリ以下
「平成26年2月」の数値未発表で一部合計値比較不可能の為
 平成26年1月〜平成13年4月は以下路線の各駅を合計・増減から除外して再計算。
 「阪神」─「本線」「なんば線」
★zipファイルの「阪神有」ディレクトリ以下
 除外せず、「平成26年2月」の未発表数値を前年同月と同一と仮定

平成24年4月〜平成26年2月 [2014年4月24日]
http:〃www.city.osaka.lg.jp/toshikeikaku/page/0000020916.html
http:〃www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000020/20916/6-2.xls

平成24年3月〜平成13年4月 [2013年6月4日]
http:〃www.city.osaka.lg.jp/toshikeikaku/page/0000164566.html
http:〃www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000164/164566/12-6.xls
780デフォルトの名無しさん:2014/04/26(土) 00:16:58.54 ID:QnRpwcSp
VBAでオブジェクト指向のClassってどう使うの?
本屋でみるVBAの本には一切記載がないと思うんですが。
標準モジュールの下にあるクラスモジュールっていうの使うの?
781デフォルトの名無しさん:2014/04/26(土) 00:36:21.25 ID:/0bFGV1l
そうだよ
782デフォルトの名無しさん:2014/04/26(土) 01:03:15.45 ID:m5B7q/+H
>>778
継承は確かに便利だけど、
それも時と場合によってそれを使うことが
本当に望ましいのか判断しないといけない。
ましてやVBAはインターフェイスはあっても継承が使えないという不思議な言語だから
コンポジションとか結構重要だよ。
783デフォルトの名無しさん:2014/04/26(土) 10:46:40.74 ID:3e8mN1Ca
>>778
単なるユーティリティレベルのサブルーチン集で充分なのに、わざわざクラスにしてどやってやってるだけでしょ
そのうち我に返るだろうから、スルーで桶
784デフォルトの名無しさん:2014/04/26(土) 18:04:27.56 ID:m5B7q/+H
クラスにしたのは複数の位置情報を
纏めて設定しておいて、実際にシートに書く時の処理と切り分けをすることも
出来るようにするという思慮もあるんだよ。
たかがクラスをちょっと持ち出したくらいでまるでトラウマのように火病る人っているよね。
普段使っている標準モジュールですらシングルトンのクラスでしかないというのに。
785デフォルトの名無しさん:2014/04/26(土) 18:55:20.55 ID:QnRpwcSp
シングルトンのクラスとは?
786デフォルトの名無しさん:2014/04/26(土) 18:59:29.87 ID:oNLUt8q5
シングルトンのクラスとは?とは?
787デフォルトの名無しさん:2014/04/26(土) 19:08:57.24 ID:QnRpwcSp
シートが3つあって
Sheet1はA1に
Sheet2はA2に
Sheet3はA3に
それぞれ選択状態にしておいた場合
その各シートで選択されているセルのアドレス情報をGETするにはどういうコードでできますか?

以前、オブジェクトブラウザかなにかをいろいろいじってたらその方法を発見したんだけど
忘れちゃった。
788デフォルトの名無しさん:2014/04/26(土) 21:44:20.29 ID:ckss0nAa
>>787
Dim R As Range
Worksheets("Sheet1").Activate
Set R = ActiveWindow.RangeSelection
789デフォルトの名無しさん:2014/04/27(日) 14:04:43.35 ID:stnFSHd/
Excelの一つながりの表の範囲を1枚のスクリーンショットとして書き出す方法はありますでしょうか?
画面2画面分ぐらいの横長な表ですがjpegやgifで書き出して保存したいのですがVBAでも問題ありません
宜しくお願い致します。
790デフォルトの名無しさん:2014/04/27(日) 14:45:53.20 ID:R2zgl6Dy
>>789
作るの難しそうですね。PDFにするなら
2010ぐらいからExportAsFixedFormatがあるのですが。

セル選択範囲を、アクティヴウィンドウ内での短形範囲の
位置情報としてとして抽出でき、
WinAPIに渡せるか、といったところじゃないでしょうか。(予想)
さらにそのビットマップをJPEG,GIFに変換する何かが必要そうですね。
便利そうなのでわたしも欲しいです。
791デフォルトの名無しさん:2014/04/27(日) 14:56:22.49 ID:oLsNKogN
印刷設定で縦横1ページに収まるように指定して、ページレイアウトか改ページプレビューで表示させるとか
792デフォルトの名無しさん:2014/04/27(日) 15:18:12.29 ID:SP8zGQAF
>>789
仮想プリンターというアプリを使うと、巨大な紙に印刷したつもりで画像ファイルにできる
793デフォルトの名無しさん:2014/04/27(日) 15:19:47.28 ID:R2zgl6Dy
>>792
素晴らしい
794デフォルトの名無しさん:2014/04/27(日) 15:37:15.92 ID:SP8zGQAF
仮想プリンターで紙のサイズをA2に設定して150dpiで印刷してみたところ
実際にはこういう巨大な画像ファイルが保存される
http://rosa-chinensis.sun.ddns.vc:8080/cgi-bin/up2/src/RC20588.png

もっと大きな紙も選択できるけど、設定を間違えると巨大すぎて開けない画像ファイルができちゃうので注意
795787:2014/04/27(日) 19:21:53.39 ID:wIC7n1Em
>>788
違う。
いちいちそのシートをActivateしなくてもそのシートの隠れたActiveCellを取得するほうほうを昔大発見したんだ。

いったいどうやるんだったっけ?
そのActiveWindowというプロパティをいじったような気もするようなしないような・・・
796デフォルトの名無しさん:2014/04/27(日) 19:40:21.18 ID:rjAzuBFb
質問すいません。

[A1]から縦に5つ入力した文字を”▲”を挟んで連結する処理を
作りたいんだけど、入力途中で「コンパイルエラー、修正候補:
ステートメントの最後」ってエラーがでる。

次のようにコードを入力していて、最終行を入力して決定キーを押した
時点でそのエラーが出るんだけど、何が間違ってるのか分からない。
どなたがご教示頂けると幸いです。

sub mojirenketsu()

Dim renketsu As String
Dim i As Integer

renketsu = ""

For i = 1 To 5

renketsu=renketsu&cells(i,1).value&"▲"  ←これを入力した時点でエラー
797デフォルトの名無しさん:2014/04/27(日) 19:50:23.93 ID:R2zgl6Dy
>>796
動いたよ。
どのワークシートのCellsなのかが不明なのでは。
ValueかTextかは別に関係ないかな
For文の後ろは書ききれなかっただけ?

Sub Renketsu()
  Dim str As String
  Dim i As Long
  str = ""
  For i = 1 To 5
    str = str & Me.Cells(i, 1).Text & "▲"
  Next i
  MsgBox str
End Sub
798デフォルトの名無しさん:2014/04/27(日) 19:57:39.29 ID:R2zgl6Dy
&使わないほうが速い

Sub Renketsu2()
  Dim str() As String
  Dim i As Long
  
  For i = 1 To 5
    ReDim Preserve str(i - 1)
    str(i - 1) = Me.Cells(i, 1).Text
  Next
  
  MsgBox Join(str, "▲")
End Sub
799デフォルトの名無しさん:2014/04/27(日) 21:29:59.52 ID:SP8zGQAF
>>796
文字列を連結する時、「&」の前後のスペースは省略できない
ここだけは自動でスペースが入らなくて、自分で入れないとエラーになる
800デフォルトの名無しさん:2014/04/27(日) 21:48:27.57 ID:SP8zGQAF
もっと厳密に言うと、入力を省略できないのは「&」の前のスペース
後ろのスペースは条件次第で省略できる
今回の質問では2箇所とも後ろのスペースが自動補完されるパターン

renketsu=renketsu&cells(i,1).value&"▲" ' エラーになる
renketsu=renketsu &cells(i,1).value &"▲" ' これなら大丈夫
801デフォルトの名無しさん:2014/04/27(日) 21:50:04.16 ID:SP8zGQAF
>>797>>798では結果が違ってくる
802デフォルトの名無しさん:2014/04/27(日) 21:52:34.25 ID:SP8zGQAF
ごめん、訂正
&の前のスペースも条件次第では入力を省略できるんだった
803デフォルトの名無しさん:2014/04/27(日) 22:03:23.28 ID:rjAzuBFb
>>799
ありがとう!その通りでした。
「これなら大丈夫」の方でうまく行きました。

>>797
実行時ではなく、記述時のエラーなので、for文の後ろはまだ
白紙だったです。
丁寧にありがとう。
Textプロパティとか初見で勉強になりました。
804デフォルトの名無しさん:2014/04/27(日) 22:21:45.87 ID:wIC7n1Em
他プックを開いて
そのブックにあらかじめ書かれてある標準モジュールにあるSub(例えばSub TestProcesure()としよう)を実行させるためには
どのようなコードを書けばいいですか?
805デフォルトの名無しさん:2014/04/27(日) 22:44:24.66 ID:wIC7n1Em
ふと疑問に思ったのでござるが
Subプロシージャと、戻り値のないFunctionプロシージャって、全く同じじゃないですか?どうですか?
806デフォルトの名無しさん:2014/04/28(月) 00:51:25.50 ID:Z51g+zsH
>>805
何を比較して「同じ」とするか、定義による
ソースはもちろん違うから、同じとは言えない
Pコードが同じかどうかは調べてみないとわからない

代用できる可能性は否定しないけど使い分けた方がいい
適切な使い分けがされていないコードを相手にするのはめんどくさいしバグの元になるから
807デフォルトの名無しさん:2014/04/28(月) 20:44:15.96 ID:PUbQSUbx
そもそもVBAに「戻り値のないFunctionプロシージャ」なんてない
戻り値の型を書かなくても値は返せる。たんにVariant型の指定を省略しただけ

Function test()
test = "test code"
End Function

このプロシジャは問題なく呼び出せる
808デフォルトの名無しさん:2014/04/28(月) 21:12:30.39 ID:PUbQSUbx
>>804
Workbooks.Open "\test.xlsm"
Application.Run "test.xlsm!TestProcesure"
809デフォルトの名無しさん:2014/04/28(月) 23:31:36.81 ID:+P6rwUoP
>>807
ふと思ったのでござるが
それが可能ならふつうのSubプロシージャを使ってたところを
そのままFunctionにかえても何ら問題なくマクロは動くってこと?
810デフォルトの名無しさん:2014/04/28(月) 23:33:34.42 ID:+P6rwUoP
>>808
なるほど。
ありがとうでござった。
811デフォルトの名無しさん:2014/04/29(火) 00:12:43.42 ID:7Qss/xhP
>>809
ダメ

そら大丈夫なコードもたくさんあるだろうけど、ダメな場合もあるんで、
特別な事情がない限りはSubはSubのまま使った方が安全
812デフォルトの名無しさん:2014/04/29(火) 00:29:30.69 ID:jGZw12rc
>>811
え?
ダメな場合って例えば?
813デフォルトの名無しさん:2014/04/29(火) 00:39:02.88 ID:7Qss/xhP
>>812
ほれ、一番簡単なサンプル
mainを実行すると数字が表示される
次に Sub a を Function a に書き換えて、もう一度mainを実行すると表示される数字が変わる
つまりSubはFunctionに置き換えられないってこと

Dim x

Sub main()
  a (1)
  MsgBox (x)
End Sub

Sub a(n)
  x = n
  On Error Resume Next
  a (n + 1)
End Sub
814デフォルトの名無しさん:2014/04/29(火) 01:49:43.07 ID:LXv8yqdQ
ふだんコピペはよくしますが
Excelではセルの内容のコピペをするとき
連続してコピーだけ、あるいは連続だけペーストだけ、というのを可能にしたいです。

ショートカットキーに関しては、そのままCTRL+Cと、CTRL+Vを割り当てればいいので簡単です。

機能に関しては、上で書いたのを読んでピンときて人もいると思うけど
コピーしたものはその順番で記憶され、ペーストするときは最新のものからペーストされていく、という仕様にします。

これを実現させるためにはどういうコードを書けばいいですか?
不明な点はエスパーしてください。
815デフォルトの名無しさん:2014/04/29(火) 01:51:28.23 ID:LXv8yqdQ
[例]
東京、大阪、千葉と書かれたセルを3連続コピーして
別シートで3つのセルら連続ペーストすれば、千葉、大阪、東京、のようにペーストされる、という感じです。
816デフォルトの名無しさん:2014/04/29(火) 01:58:42.35 ID:7Qss/xhP
>>814
そういうのをスタック方式という
わざわざ作らなくても、クリップボードをスタック式に拡張するフリーウェアが既にある
817デフォルトの名無しさん:2014/04/29(火) 09:33:17.01 ID:LXv8yqdQ
>>816
そんなことを言っちゃ警察はいらんよ。

こうすればいいさ。

Public sClip(100) As String '100は適当な最大数
Public iClip As Integer
Sub sCopy()
iClip = iClip + 1
sClip(iClip) = ActiveCell.Value
End Sub
Sub sPaste()
If iClip < 1 Then
End
End If
ActiveCell.Value = sClip(iClip)
iClip = iClip - 1
End Sub
818デフォルトの名無しさん:2014/04/29(火) 14:06:35.48 ID:LXv8yqdQ
ところで100としたところがオレがプログラミング哲学に反するところなんだが
これを動的配列かなにかを使用して改善することはできないか?

あまりないが100以上になるとエラーが出るところが気に入らない。
しかしモジュール変数の配列では動的配列がうまくできなそう。
819デフォルトの名無しさん:2014/04/29(火) 14:35:41.53 ID:xkTOBPPn
リングバッファ(FIFO)にするといいよ
820デフォルトの名無しさん:2014/04/29(火) 14:55:03.30 ID:/qylVqTc
>>818
100だろうが1000000だろうが、リソースが有限な以上どこかに上限はある
上限気にするなら上限に達してもエラーにならないように作れよ

ところで昔オフィスクリッポボードとかいうのが有った気がしたんだが、あれどこにいったんだろ
探してみたら、リボンの中にいまでもひっそりとあるのかw
821デフォルトの名無しさん:2014/04/29(火) 16:16:14.87 ID:oddt27dL
>> 818
ReDim Preserve ,UBound あたりで何とでもなるだろう。
でも、そんな面倒なことせずに必要な次元数を固定確保して >> 820 に一票

>> 820
オフィスクリッポボード・・リボンの中にいまでもひっそりと隠れているよ(ホームタブの左下隅)
822デフォルトの名無しさん:2014/04/29(火) 16:16:57.58 ID:AVYTmVui
プログラミング哲学w
823デフォルトの名無しさん:2014/04/29(火) 18:17:28.97 ID:/qylVqTc
オフィスクリッポボードを操作すれば良いんじゃないかと思ったんだが
あれ、VBAから直接操作できないのか

さっさとなくせば良いのにw
824デフォルトの名無しさん:2014/04/29(火) 20:59:07.47 ID:jGZw12rc
>>818
配列の替わりにコレクションかディクショナリを使えば?
825デフォルトの名無しさん:2014/04/29(火) 21:22:15.37 ID:7Qss/xhP
「哲学」だとか寝言言うまでもなく、データ数不定なのに配列の決め打ちは確かに褒められたもんじゃない
「これぐらいあれば大丈夫だろう」が、過去どれだけひっくり返ってきたことか

今回のケースなら、どうせ人間の指の動く速さがボトルネックになるんだから普通にReDimでいいと思う
せいぜい16連射、どんなに余裕を見ても秒間数十回しか呼ばれないんだから、処理が多少重くても影響なし
826デフォルトの名無しさん:2014/04/30(水) 02:40:51.87 ID:Whj7Eetj
これぐらいあれば大丈夫だろう

秒間数十回しか呼ばれないんだから、処理が多少重くても影響なし
は、別の話だろ

まさかReDim使えば配列は無限に大きく出来るとでも思っているのか?
827デフォルトの名無しさん:2014/04/30(水) 02:53:49.94 ID:x00tEAYh
そもそもワークシートやセルの数が有限なんだから、スタックも無限である必要はない
しかし上限は簡単には決められないから、必要に応じて拡張するように作る
そのために処理が重くなるのは困るけど、今回は多少重くても問題ない
828デフォルトの名無しさん:2014/04/30(水) 03:27:22.99 ID:Whj7Eetj
いやだから、配列は無限に拡張できると思ってるのか?
829デフォルトの名無しさん:2014/04/30(水) 15:19:07.78 ID:Iw0O5ndu
ユーザ定義関数を作ってセルに自作関数を入れるとき、
そのセルのアドレス、というかrow数、column数を取得するにはどうしたらいいですか?
そのユーザ定義関数を定義するときのコードの中で使いたいんです。

まさか=MYFUNCTION(ROW(),COLUMN())みたいにして渡さないといけない?
830829:2014/04/30(水) 15:29:17.91 ID:Iw0O5ndu
おや、ユーザ定義関数では、CellsとかOffsetは使えない?

例えばそのセルの値だけ右に移動した先にあるセルの値を出力する関数を作りたいとき
rowとcolumnで渡して返り値をCells(row,column).Offset(0,Cells(row,column).Value)としても全く動かない。
831デフォルトの名無しさん:2014/04/30(水) 16:01:29.61 ID:QkWVSK2H
>>829
Application.ThisCell.Address
832デフォルトの名無しさん:2014/04/30(水) 16:16:47.04 ID:Iw0O5ndu
>>831
ありがとうございます。

ところでこのコードだけでもものすごく役に立ちありがたいのですが
それよりもさらに知りたいことがあります。

このApplication.ThisCell.Addressというのはどうやって調べたんですか?
こんなマレなコードは本屋で売ってるVBAの本なんかでは絶対に出てこない類のものです。
どうやって調べたのでしょうか?
そしてこのより詳しい機能はどうやって調べますか?

ちょっと調べたらApplication.ThisCell.Offset(x,y)でちゃんと他セルの値も取得できて便利です。
833デフォルトの名無しさん:2014/04/30(水) 17:41:55.57 ID:bd35DGVT
n=5として、[C5:C16]の選択を次みたいに表したら、「修正候補:区切り記号」
みたいなメッセージが出て、その行が赤くなり、「:」の部分が選択常態になってる。

range("C"&n:"C"&n+11).select

↑これなんだけど、これ何が間違ってるの?
834デフォルトの名無しさん:2014/04/30(水) 17:44:03.34 ID:Iw0O5ndu
Application.ThisCellのことが気になって夜も眠れません。
Application.ActiveCellとどこが違うの?

実に不思議なことに
普通のSubプロシージャとかではApplication.ActiveCellしか使えずApplication.ThisCellだとエラー。
逆にユーザ定義関数を書くところではApplication.ThisCellしか使えずApplication.ActiveCellは使えない。
機能的には全く同じものなのに。
不思議ですね。
835デフォルトの名無しさん:2014/04/30(水) 17:45:32.67 ID:Iw0O5ndu
range("C"&n&":C"&n+11).select
にしないといけない。
836デフォルトの名無しさん:2014/04/30(水) 18:05:42.98 ID:bd35DGVT
>>835
ありがとう。
それをそのままコピーして貼りつけたんだけど、なぜかまた同じメッセージが
出て、今度は「":C"」の部分が選択状態になってる。
どこか、別の行がおかしいのかな。

Sub a()

Dim i As Integer
Dim n As Integer

Worksheets(1).Activate
n = 5

For i = 1 To 3

range("C"&n&":C"&n+11).select

(以下、略)
837デフォルトの名無しさん:2014/04/30(水) 18:18:39.04 ID:bIvK3JIl
>>836
>>799-802
range("C"&n &":C"&n+11).select
838デフォルトの名無しさん:2014/04/30(水) 18:47:49.29 ID:bd35DGVT
>>837
おお、できた。ありがとう。
839デフォルトの名無しさん:2014/05/01(木) 01:54:32.40 ID:tA55q8Iy
' 参照型変数sh1の参照渡しとsh2の値渡しとで結果が違うのが理解できません。
' 参照型変数を値渡しするsh2がNothingのままなのは何故なんですか。
Sub a()
 Dim sh1 As Worksheet, sh2 As Worksheet
 b sh1
 c sh2
 Stop
End Sub

Sub b(ByRef sh As Worksheet)
 Set sh = ThisWorkbook.Worksheets("Sheet1")
End Sub

Sub c(ByVal sh As Worksheet)
 Set sh = ThisWorkbook.Worksheets("Sheet1")
End Sub
840デフォルトの名無しさん:2014/05/01(木) 02:23:33.09 ID:UMPLKQg9
>>839
変数「が」参照するのと変数「を」参照するのは別だから
841デフォルトの名無しさん:2014/05/01(木) 06:29:41.23 ID:VQHKFgN+
ユーザ定義関数で他セルの値を計算に使って表示してるとき
他セルの値を変更してもすぐにはそのセルの値が反映されない問題は
どう解決しますか?
842デフォルトの名無しさん:2014/05/01(木) 06:47:21.36 ID:9zM4+Fav
>>834
まったく知らずに言うけど、
ActiveCellは、ユーザがマウスでクリックしたなど、
今フォーカスを持っているセル

ThisCellは、フォーカスを持っていないが、
今書き込むなど、計算しているセル

だから、ユーザ定義関数は、単なる何かを計算する関数で、
Applicationオブジェクトとは関係がなく、
フォーカスイベントをもらえないのでは?

Application.ThisCellは、定数のように静的なプロパティで、
どの関数からでも、使えるメンバなのかも?
843デフォルトの名無しさん:2014/05/01(木) 15:43:23.17 ID:C2Wy7tu3
なんでヘルプ見ないんだろ。
ThisCellと書いてF1キー雄だけなのに。
> Range オブジェクトとして呼び出されるユーザー定義関数が入っているセルを返します。
844デフォルトの名無しさん:2014/05/01(木) 21:05:28.24 ID:8XTpF2p+
http://d.hatena.ne.jp/robbie21/20060821/1156193877
ここにある、複数のシートを結合するマクロを
xp+Office2000で使っていたのですが
win7+office2013に移行したところ、うまく動きません。
具体的には、ふたつ結合したところで終わってしまいます。
どこを直せばいいのでしょうか?
845デフォルトの名無しさん:2014/05/01(木) 21:28:28.93 ID:UMPLKQg9
>>844
バージョンに依存する部分なんてなさそうだけどなあ
呼び出し方とか間違えてない?
846デフォルトの名無しさん:2014/05/02(金) 04:58:44.30 ID:AXfyvegw
>>841
Application.Volatile
847841:2014/05/02(金) 11:21:13.12 ID:0Sm4zufH
>>846
おい、すごいじゃないか(笑)
今年一番感動した(爆)

それより知りたいんですが、こういう解法ってどうやって探し当てたんですか?
ふつうのVBA入門系の本には載ってないし
ヘルプでも、Application.Volatile→使用法の方向では調べられても、やりたい事→Application.Volatileの方向では、絶対に調べられないか困難だぞ。
848デフォルトの名無しさん:2014/05/02(金) 12:31:21.02 ID:eSB12fTe
>>847
ggrks
>>832と同じ人?
849デフォルトの名無しさん:2014/05/02(金) 16:31:45.74 ID:VTOLN4jY
>>845
xpからwin7は同じマシンで、呼び出し?使い方も同じです。
試しにより高性能なマシンでやってみたところ
xpのときよりも10倍ほど時間がかかるもののとりあえず完走しました。
2000のときは窓が一つで中に複数のファイルを開く形でしたが
2013のようにファイルごとひとつづつ立ち上がると負担が大きいんでしょうか。

マクロ自体に問題があるわけではなさそうなので別のマシンで使うことにします。
ありがとうございました。
850デフォルトの名無しさん:2014/05/03(土) 05:25:42.80 ID:9Cuh0B7r
文字列で指定した関数を呼び出す方法ってありますか?
引数や戻り値はとりあえず置いておいて、シートに書かれた関数があれば実行して、無ければエラーメッセージを出力するような処理を作りたいです。
851デフォルトの名無しさん:2014/05/03(土) 07:59:55.44 ID:W3aEO+Ug
他シートをActivateしたらそのシートでActiveCellになるはずのセルのアドレスを
そのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法ですか?
852デフォルトの名無しさん:2014/05/03(土) 08:19:26.49 ID:ElKs5wH6
>>850
適当だしあんまり確認してないけどこんなのどうでしょう、バグったらごめんなさい
Private Sub Test()
Dim buf As Variant
Dim target As Range
For Each target In Selection
If target.Value = "" Then
Debug.Print "Error"
Else
'ここでセルに入力されたワークシート関数を実行・評価する
buf = Application.Evaluate(target.Value)
If IsError(buf) Then
Debug.Print "Error"
Else
Debug.Print buf
End If
End If
Next target
End Sub
853デフォルトの名無しさん:2014/05/04(日) 07:58:46.98 ID:PkGldEjn
構造化してる変数が2つあるんですが
1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
854デフォルトの名無しさん:2014/05/04(日) 08:03:57.92 ID:PkGldEjn
Structure Student
Dim name as String
Dim age as integer
Dim sex as String
Dim first_time_sex_date as Date
End Structure

Dim student(2) as Student

student(1).name="Taro"
student(1).age=16
student(1).sex="Male"
student(1).first_time_sex_date="2012/7/7"

student(2)=student(1)
student(2).name="Jiro"

みたいにして変になる。
855デフォルトの名無しさん:2014/05/04(日) 08:15:17.54 ID:PkGldEjn
VBAでIEを操作するとき
タブ(複数開いてる)でアクティブになっているページをgetするためには
どういうコードになりますか?
856デフォルトの名無しさん:2014/05/04(日) 08:41:36.79 ID:v/jP7knV
857デフォルトの名無しさん:2014/05/05(月) 02:49:54.32 ID:GlFHWnLl
配列を関数にByvalで渡すことが出来ないのは何故ですか?
VariantにすればByvalで渡せますが要素数が多いと速度が激しく遅くなるのは何故ですか?
この2つ調べても分からなかったので教えてください
858857:2014/05/05(月) 02:50:19.74 ID:GlFHWnLl
エクセル2002です
859デフォルトの名無しさん:2014/05/05(月) 02:55:31.79 ID:GlFHWnLl
配列をVariantに入れた変数は配列の先頭番地を格納してるので
Byvalで渡すとき要素数が大きくなっても速度が遅くならないと思うんですけど
860デフォルトの名無しさん:2014/05/05(月) 03:33:06.97 ID:uFaF33P2
>>859
任意の型の配列をVariantに代入した時、代入されるのはポインタ(番地)じゃなくて内容、配列全体が丸ごとコピーされる
だから配列のサイズに応じて処理時間も変わる

Dim A(100) As Integer
Dim B As Variant
B = A
MsgBox TypeName(B)

このサンプルの場合、代入後にBの型を見るとInteger(配列)に変わっている
861デフォルトの名無しさん:2014/05/05(月) 03:45:08.05 ID:GlFHWnLl
>>860
Integer(配列)に変わっているという事は配列全体が丸ごとコピーされてる証拠になるわけですか?
じゃあ普通の配列がByvalで渡せないのは配列全体が丸ごとコピーされて
処理時間が遅くなるから使い物にならないという理由なのですかね
862デフォルトの名無しさん:2014/05/05(月) 08:56:42.69 ID:uFaF33P2
証拠にはならんね
ちょっと調べてみたけど、簡単には証拠は示せなさそう

もっと厳密に言うと、Variantに配列を代入すると、もともとVariantには数値が1つしか格納できないので、
配列のコピーが作られた上で、その配列へのポインタがVariantに格納される
だからVariantの中身はポインタ、という理解は間違ってはないけど、そのポインタの先にあるのは
代入元の配列ではなく、新しく作られた配列になっている
配列を丸ごと新しく作るため、処理はそれなりに重くなるしメモリも消費する
証拠はないけど、そういう仕様

どうして配列がbyValで直接渡せないのか、理由はよくわからないが、たぶんスタックオーバーフローを防ぐためのMSのおせっかいだと思う
Variantに配列を入れた時は、配列の本体は別の所に作られてスタックはVariant本体の分しか消費しない
だから許容する仕様にしたんじゃないのかな
863デフォルトの名無しさん:2014/05/05(月) 18:06:25.33 ID:/BaOb3+l
FSOについて質問ですが

Dim FSO As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.CreateTextFile("\\PC2\os\test.txt")
.WriteLine Now
.Close
End With
Set FSO = Nothing

ネットワーク先のディレクトリに新規ファイルの書き出しを行った場合
ネットワーク先のPCが消えているとVBAエラーが発生しますが、このエラーを無視して
コードを停止させることなく続行させ続けるにはどうすれば良いのでしょうか?
864デフォルトの名無しさん:2014/05/05(月) 18:15:41.79 ID:zTX2z7nm
ON ERROR RESUME NEXT
865デフォルトの名無しさん:2014/05/05(月) 18:23:09.75 ID:/BaOb3+l
>>864
ありがとうございます!これは便利ですね。独学でVBAを勉強中ですが知りませんでした。。
866デフォルトの名無しさん:2014/05/05(月) 18:25:54.17 ID:hthjFo5y
便利なのは便利なんだろうけどさ、その危険性ってのも判った上で使えよ
867デフォルトの名無しさん:2014/05/05(月) 18:51:57.18 ID:zTX2z7nm
SleepとDoEventsの違いは何ですか?

*ちなみにSleepはPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwmillsecounds As Long)と宣言してから使います
868デフォルトの名無しさん:2014/05/05(月) 19:02:52.67 ID:eTvbwywS
逆に共通する事知りたいわ
869デフォルトの名無しさん:2014/05/05(月) 19:37:01.29 ID:uFaF33P2
870デフォルトの名無しさん:2014/05/05(月) 19:38:31.76 ID:zTX2z7nm
>>869
それオレじゃないか(ワラ
871デフォルトの名無しさん:2014/05/05(月) 20:03:01.60 ID:rD1fSl2O
SubとFunctionが同じだとか言い続けてるバカもおまえだろ
文体と質問のアホさ加減が同じ
872デフォルトの名無しさん:2014/05/05(月) 20:05:33.73 ID:uFaF33P2
Sleepはプログラムの実行を一時的に止める
DoEventsはメッセージループを処理する
873デフォルトの名無しさん:2014/05/05(月) 20:06:58.64 ID:uFaF33P2
>>839あたりからも同じ匂いがする
874デフォルトの名無しさん:2014/05/05(月) 20:09:20.00 ID:F7Zw8bMG
>>787 >>851 あたりも同じかな
875デフォルトの名無しさん:2014/05/05(月) 20:21:56.97 ID:zTX2z7nm
また味わい深い質問を思いついたので堪能していただければと思います。
ではさっそく質問に移ります

いろんなソフトウェアの上のほうに
ファイル(F)、表示(V)・・・、ツール(O)、ヘルプとあり、たとえばファイル(F)の下には終了(X)とだいたい決まっています。

これVBAから現在立ち上げてるアプリをすべてオブジェクト変数にいれて
そのメソッドとしてキー入力をできるようにできる方法はありませんか?

たとえばメモ帳を
Appli(1)というオブジェクト変数にして
Appli(1).KeySend("FX")というコードを書けば
見事にメモ帳が閉じるような。

もちろん本題は閉じることではなくいろんなアプリを自由自在に操ることですが。
876デフォルトの名無しさん:2014/05/05(月) 20:43:36.05 ID:iASqhGK2
>>875
VBAからと言うのが
APIも含めるという広域を意味しているなら
出来ないこともない。
877デフォルトの名無しさん:2014/05/05(月) 21:05:07.90 ID:zTX2z7nm
>>876
含めましょう。
ではどうやるのでしょうか?
878デフォルトの名無しさん:2014/05/05(月) 21:31:26.89 ID:uFaF33P2
ウィンドウハンドルを取得した上でキーボードやマウス、その他のイベントを直接送ってやればほとんどなんでもできるけど、
さすがにVBAの比率が低くなりすぎてスレチ
API関係のスレにでも行け
879デフォルトの名無しさん:2014/05/06(火) 09:50:23.96 ID:Avr/JzZk
Excel VBAでこんな機能のプロシージャってつくれますか?

[引数] Webサイトページの一番上のバーに表示されてる「タイトル」
[返り値] なし
[機能] 現在開いてるWebページを全部調べて、引数の「タイトル」のものがあればそれをアクティブにしてタブなら前面に出してそれをオブジェクト変数に代入する。なければなにもしない。
880デフォルトの名無しさん:2014/05/06(火) 14:55:03.32 ID:jl3/KWxA
できますん

はい、次のかた〜
881デフォルトの名無しさん:2014/05/06(火) 16:34:49.64 ID:EF/hc8MQ
>>879
APIで可能
VBAでやる必然性なし
882デフォルトの名無しさん:2014/05/06(火) 16:48:53.58 ID:WIbNvSPM
>>881
必然性?
883デフォルトの名無しさん:2014/05/07(水) 01:13:46.53 ID:XHO24LnT
シートのCustomPropertyをVBAで設定して
シートを右クリックなどして見れるようにするにはどうすれば良いですか。セルとかコメントに出力する以外の方法でお願いします。
884デフォルトの名無しさん:2014/05/07(水) 01:37:28.97 ID:uh4oWvq+
885デフォルトの名無しさん:2014/05/07(水) 01:56:01.55 ID:XHO24LnT
>>884
各シートにこういうプロパティ画面を表示するにはどうやるのですか?
886デフォルトの名無しさん:2014/05/07(水) 11:11:46.79 ID:aD6Um6cx
みんな なんでも知ってるな・・・
887デフォルトの名無しさん:2014/05/07(水) 13:35:40.93 ID:w4bXJfpE
References.AddFromFile()でVBScriptの正規表現ライブラリを参照した後、
RegExpやMatchCollection型の変数を定義するとユーザー定義型未定義の
コンパイルエラーが出てしまうのですがどうしたらよいですか?
888デフォルトの名無しさん:2014/05/07(水) 13:39:29.10 ID:uh4oWvq+
>>887
エラーが出る最小限のソース晒して
889887:2014/05/07(水) 14:33:27.95 ID:w4bXJfpE
Dim RefFile As String

RefFile = "C:\Windows\System32\vbscript.dll\2"
ActiveWorkbook.VBProject.References.AddFromFile RefFile
RefFile = "C:\Windows\System32\vbscript.dll\3"
ActiveWorkbook.VBProject.References.AddFromFile RefFile

Dim re As RegExp
Dim mc As MatchCollection

これだとコンパイルチェック前にライブラリがロードされてないから、
RegExp型やMatchCollection型が定義されてないってないなるのは当たり前ですが、
これを回避する方法はありますか? ライブラリロードだけを別マクロにして1度だけ
実行すれば良いんでしょうけど。
890デフォルトの名無しさん:2014/05/07(水) 14:58:46.92 ID:uh4oWvq+
>>889
それはVBAでは基本的に無理
万能の解決策じゃないけど「CreateObject」「実行時バインディング」あたりで調べてみ
891887:2014/05/07(水) 15:20:21.05 ID:w4bXJfpE
>>890
ありがとうございます。ちょっと調べてみます。
892デフォルトの名無しさん:2014/05/08(木) 16:21:39.25 ID:DqNc14pR
>>887
VBAで正規表現を扱うためのやり方をググるとこの辺がヒットするんだけど
それではアカンの?

VBAで正規表現を使う (1/3):CodeZine
http://codezine.jp/article/detail/1655

Office TANAKA - Excel VBA Tips[正規表現によるマッチング]
http://officetanaka.net/excel/vba/tips/tips38.htm
893デフォルトの名無しさん:2014/05/08(木) 16:45:09.21 ID:UhAEWxzw
まさかと思うが事前に参照設定する方法を知らないわけじゃないよな?
なんかの事情でどうしても実行時に参照したいんだよな?
894デフォルトの名無しさん:2014/05/08(木) 17:19:41.49 ID:WIVGkEtc
参照設定ってなんですか?
目的はなんで、それをやるとなにができて、どういうことが便利ですか?
895デフォルトの名無しさん:2014/05/08(木) 18:24:47.72 ID:uOW3clqT
使用するパソコンが不定だとか、使う人が不定だとかで、説明する手間を省きたいんだろ
よくある話じゃないか
896デフォルトの名無しさん:2014/05/08(木) 21:10:31.28 ID:JZCmTzL0
参照設定で愚ぐれ
897デフォルトの名無しさん:2014/05/10(土) 00:30:41.40 ID:DYZqKBH3
シートに入力されたデータをいろいろ演算する必要があるとします。

そのとき
(1) 一旦、変数(配列変数とか)に入れて、その変数でいろいろ計算する
(2) そのまんまセルの値を参照しながら計算する (Cells(r,c)とかを駆使して)

の、どっちがいいですか?それともどっちも変わらないですか?場合によるならその解説もお願いします。
898デフォルトの名無しさん:2014/05/10(土) 00:57:40.41 ID:DYZqKBH3
こんな関数をお願いします。

引数 Rabgeオブジェクト(セル)
返り値 Rabgeオブジェクト(セル)

処理 もし引数が結合セルだった場合、その左上のセルを返り値として返す。結合セルでないふつうのセルだった場合、なにもせずおなじセルを返す。 
899デフォルトの名無しさん:2014/05/10(土) 00:59:22.57 ID:0NkefTVZ
>>897
どっちがいいかと言えば、自分にとってわかりやすい方

セルの読み書きは変数への代入より時間がかかるので、スピード重視なら変数に入れた方がいいと言われるけど
本気で計算スピードが欲しいならVBとかC#とか使うべきであって、結局は最初に書いたように、
プログラムを作りやすい方を選べばいいと思う
900デフォルトの名無しさん:2014/05/10(土) 01:01:36.00 ID:0NkefTVZ
>>898
MergeCellsとMergeAreaでがんばれ
901デフォルトの名無しさん:2014/05/10(土) 11:38:30.40 ID:Om1HfajV
>>898
X.MergeArea.Cells(1,1)
902883:2014/05/11(日) 03:04:41.66 ID:X2XaIOXl
シートのCustomPropertyはエクセル再起動すると値が変化してる事に気付きました。これは自分だけ?
903デフォルトの名無しさん:2014/05/11(日) 13:20:36.77 ID:E4N7zZTW
Excel2007 2010のマルチプロセッサ対応はどのような処理がどのくらいスピードがアップするのでしょうか?
自宅PCコア2Duo3GHZで 100メガぐらいある表のセルに数式を追加する処理がすべて動くのに5分ぐらい時間がかかるのですが
会社に持っていき一番速いi7 3Ghzのクアッドコア8スレッドのPCで実行させてみましたが同じく5分ぐらいかかりがっかりしました
それでも多少は速くなったようですが、何とか少しでも(でjきれば爆発的に)処理時間を速くできない物かと思っています。

世の中にはXeonE5系のものは15コア30スレッドというような物も存在しますが
http://ja.wikipedia.org/wiki/Xeon
Xeon搭載PCは30万ぐらい出せば買えるようですが
速くなるなら安い物かと思っているのですが
Xeonのコア数の多い物を使うとどのくらい高速になるのでしょうか?

(30スレッドでも処理時間はほとんど変わらず30万無駄遣いにおわるのでしょうか?w)
904デフォルトの名無しさん:2014/05/11(日) 13:28:37.64 ID:9n+Ded1d
ユーザが作った関数などはマルチコア対応ではありません。
通常マルチコアを有効に使うためにはマルチスレッドでの処理を行います。
残念ながらVBA単独でのマルチスレッド処理はできないと思います。
http://q.hatena.ne.jp/1310989651

諦めませう
905903:2014/05/11(日) 13:40:22.25 ID:4IeCHncM
>>904
残念、、、ありがとうございます。
処理中に画面下には8CPUというような表示が出ていましたがあれは書いてあるだけなのですねww
VBAはマルチスレッドに非対応だとマルチCPU対応のメリットは少なそうですね。
906デフォルトの名無しさん:2014/05/11(日) 15:37:14.98 ID:qmCq3i4D
ごー
907デフォルトの名無しさん:2014/05/11(日) 17:07:08.06 ID:valH51XC
ON ERROR GOTO NEXT使ってるとき
エラーの種類によって処理を分岐する方法があったと思うけど
そのときに使用するエラーコードの番号ってどうやって取得しますか?

○○のエラーがでたときはメッセージ出して強制終了、
□□のエラーがでたときは無視してNEXTにそのまま続ける、
△△のエラーがでたときはこういう処置をして続行する、

みたいにしたいんです。
908デフォルトの名無しさん:2014/05/11(日) 17:14:44.13 ID:9n+Ded1d
Err.Numberのこと?

俺は
MsgBox Err.Number & " " & Err.Description, vbCritical, "xxxx"
とかで表示させて強制終了にしてるけど


実行時エラーの一覧
http://officetanaka.net/Excel/vba/error/execution_error/index.htm
909デフォルトの名無しさん:2014/05/11(日) 17:37:21.71 ID:sdx099L9
>>903
エクセルそのものはマルチコア対応だから、普通のワークシート関数とかは効果あるはず

そもそもCPUが原因で遅いのじゃなければ、CPU早くしても効果薄いぞ
100メガのエクセルとか、IOでだいぶ時間食う気がするけど
ハードに金かけるならSSDとか試してみる価値はある

VBAのコード見直せば早くなる可能性もあるけど
910デフォルトの名無しさん:2014/05/11(日) 17:39:07.78 ID:valH51XC
>>908
ありがとうございます。
Errオブジェクトというのがあったのですか。
これは便利ですね。
911デフォルトの名無しさん:2014/05/11(日) 20:47:26.63 ID:zdamCAAu
>>903
何をやってるのかわからんけど、画像とかなしで 100MB になってるなら、マジで DBMS の導入考えた方がいいかも
SQL-Server Express とかならとりあえず只だし
912デフォルトの名無しさん:2014/05/12(月) 15:19:33.35 ID:l6E7y7n0
>>893
仕事で年に1回しか使わないマクロで、参照を設定し忘れて毎度何でエラーになるのか悩むもんでw
913デフォルトの名無しさん:2014/05/12(月) 15:46:22.10 ID:r3XyQ/Bd
>>912
ソースの先頭か、最初に開くシートの見える場所にコメントを書いておく
俺がよく使う方法は、ファイル名にコメントを入れる

Book1 (参照設定を忘れないこと).xlsx

ファイル名を勝手に変更できない時は、同じフォルダに空のテキストファイルを作って、
そのファイル名をコメントにしておく

Book1.xlsx
Book1 (参照設定を忘れないこと).txt

こんなふうにしておくと、2つのファイルが隣に並ぶので、コメントが必ず目に入る
914デフォルトの名無しさん:2014/05/12(月) 16:22:06.75 ID:Pq2vKY3y
>>912
参照先のパスが毎回変わるとか、特殊な事情があるのか?

なぜ参照設定した状態で保存しないの?
なぜ実行時にコードで動的にやる必要があるの?
915デフォルトの名無しさん:2014/05/12(月) 18:04:32.83 ID:tYXPKjS8
Excel2010

フォームにあるボタンを一時的に機能を停止するのに
btnxx.Enabled = False
にすれば、ボタンがグレーアウトされて使えなくはなりますが、シートに貼り付けたボタン
に対して同じような事するにはどうするんでしょうか?
916デフォルトの名無しさん:2014/05/12(月) 21:17:50.64 ID:Pq2vKY3y
>>915
Sheet1.Shapes("ボタン 1").ControlFormat.Enabled = False
Sheet1.CommandButton1.Enabled = False
とか
ただ、フォームコントロールのEnabled=Falseにしても、グレーアウトしないな
押せなくはなるけど
917デフォルトの名無しさん:2014/05/12(月) 21:53:45.43 ID:tYXPKjS8
>>916
こちらの言い方がおかしかったか
http://www.dotup.org/uploda/www.dotup.org5057295.jpg
こういう状態の事です。

ま、それは良いんですが、、、
すいません、上の方でだと、動いてしまいます
下だと
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
で実行時エラー438になってしまいます。

当面動作予定は無いので、消しておきます
918デフォルトの名無しさん:2014/05/13(火) 03:16:42.81 ID:fpyFYdoX
>>917
シートに貼るボタンは「フォーム コントロール」と「ActiveX コントロール」の2種類ある
で、グレーにして押せなくできるのは後者で、>>916の2番目も後者に対して使う方法
919デフォルトの名無しさん:2014/05/13(火) 11:11:36.24 ID:3oieHFyI
>>918
了解しましたです。ありがとうございます。
920デフォルトの名無しさん:2014/05/13(火) 12:41:31.19 ID:oNeP8dL2
>>914
毎年、客から支給されるデータをマクロで整形してDTPソフトに貼り込む作業なもんで。
921デフォルトの名無しさん:2014/05/13(火) 19:25:34.15 ID:/l0lTNTz
>>920
参照設定はプログラムモジュールを指定するもの
データが変わろうが、参照設定は変わらんだろ
922デフォルトの名無しさん:2014/05/14(水) 00:44:43.93 ID:4NYZ0gDe
>>921
確か参照設定はブックに依存するのではなく、
アプリケーション側に依存したはず。
つまり参照設定していない他のPC上にあるEXCELでそのブックを立ち上げても
ダメだったんじゃなかったかな。
違ってたらごめん。
923デフォルトの名無しさん:2014/05/14(水) 01:44:23.14 ID:k2UyUu49
>>922
お前の環境では、あるブックに参照設定したらすべてのエクセルファイルでその参照設定が有効になってるのか?

つか、今のエクセル、未使用の参照設定勝手に外して保存しやがるな
それだけじゃなく、未使用のコードも勝手に消されてる
なんつう迷惑な事しやがるんだ
924デフォルトの名無しさん:2014/05/14(水) 19:48:14.68 ID:9e1uL7m3
>未使用のコードも勝手に消されてる

オプションで清掃が有効になってない?
925デフォルトの名無しさん:2014/05/15(木) 11:36:12.81 ID:xP8vZsnc
>>924
その 清掃 とかいうオプションはどこにある?
926デフォルトの名無しさん:2014/05/15(木) 20:30:44.53 ID:Mes52j2B
馬鹿には無理
927デフォルトの名無しさん:2014/06/06(金) 17:56:50.11 ID:xrGe04ue
Functionで返り値に動的配列とすることは可能ですか?
その場合どんなコードになりますか?
928デフォルトの名無しさん:2014/06/06(金) 18:58:23.21 ID:nBXq1INX
>>927
Function ar(cnt As Integer) As Variant
Dim ret() As Integer
ReDim ret(cnt)
ar = ret
End Function
929デフォルトの名無しさん:2014/06/06(金) 19:29:10.75 ID:xrGe04ue
>>928
あれれ?おかしいですよ。
返り値はVariantなのにそのプロシージャ内ではInteger。
こんなこと許される?
930デフォルトの名無しさん:2014/06/06(金) 19:29:56.02 ID:xrGe04ue
Dim ret() As Integer
ReDim ret(cnt)

をまとめて

Dim ret(cnt) As Integer

にしちゃ問題あるの?
931デフォルトの名無しさん:2014/06/06(金) 20:56:58.40 ID:2p7Hju+q
>>930
そんなことできない
932デフォルトの名無しさん:2014/06/06(金) 20:59:12.41 ID:xrGe04ue
>>931
それはなぜですか?
933デフォルトの名無しさん:2014/06/06(金) 21:07:05.43 ID:fJT63IUR
何故と言われてもVBAのお作法みたいなもんだしな
934デフォルトの名無しさん:2014/06/06(金) 21:12:39.28 ID:2p7Hju+q
>>932
VBAのルールで、Dimの中で配列のサイズに変数は使えない、と決まっているから
実際にやってみればエラーが出るからすぐ確認できる
935デフォルトの名無しさん:2014/06/06(金) 21:27:08.12 ID:xrGe04ue
そうでござったか
936デフォルトの名無しさん:2014/06/07(土) 11:14:14.46 ID:7p+CDDc/
ワークシート main のC7に作業時刻を入れています eg 10:30

前回作業時刻よりも1時間以降経過した後でないと同じ作業は出来ないようにしたいのですが、、、
If Now() < DateAdd("h", 1, Worksheets("main").Cells(7, 3)) Then
MsgBox "前回作業時刻よりも1時間経っていません。" & vbCrLf & _
DateAdd("h", 1, Worksheets("main").Cells(7, 3)) & " 以降に作業してください"
Exit Sub
Else
MsgBox "現在時刻:" & Format(Now(), "hh:mm") & vbCrLf & _
"直前作業時刻より1時間後:" & DateAdd("h", 1, Worksheets("main").Cells(7, 3))
End If
とすると、
現在時刻:11:12
直前作業時刻より1時間後:11:30:00
となってElse以降しか実行しません

時刻の比較ってどうするんでしたっけ?
937デフォルトの名無しさん:2014/06/07(土) 15:30:59.32 ID:SxbAzKvi
.TIMEVALUE()
938デフォルトの名無しさん:2014/06/07(土) 16:25:46.19 ID:7p+CDDc/
ありがとう

If TimeValue(Now()) < TimeValue(DateAdd("h", 1, Worksheets("main").Cells(7, 3))) Then
でElse以前が動作できるようになりました
939デフォルトの名無しさん:2014/06/07(土) 17:38:13.17 ID:qI6lrvl+
>>938
Cells(7, 3)に入ってる時刻がシリアル値なら、そんな長い式を書かなくてもこれでいける

If Now() < Worksheets("main").Cells(7, 3) + #1:00:00# Then
940デフォルトの名無しさん:2014/06/07(土) 17:41:53.05 ID:qI6lrvl+
あ、ごめん。今のなし
日付込みだとおかしくなる
ワークシート上のシリアル値は1900/1/1になってる可能性があるから
941デフォルトの名無しさん:2014/06/07(土) 18:42:33.53 ID:FLlpq6Lc
VBAは気づいたらワークシート関数とか一切使ってなかった
じゃVB6で良かったんじゃね?みたいな事になるよね
942デフォルトの名無しさん:2014/06/07(土) 18:49:17.07 ID:qI6lrvl+
ちょっとした計算とか確認程度なら、モジュールすら作らずにイミディエイトウィンドウでやっちゃう
コンパイルどころかソースファイルすら作る必要がないという手軽さは他の処理系では真似できない
943デフォルトの名無しさん:2014/06/07(土) 19:25:35.22 ID:SxbAzKvi
944デフォルトの名無しさん:2014/06/10(火) 02:49:48.07 ID:YTnem67I
windows7, office2010を使っています

data1,data2,data4が同じフォルダに入っている場合に、
存在しないdata3を飛ばしてファイルをすべて開くというテストプログラムを作っています

Sub test()
Dim I As Long
For I = 1 To 4
If Dir("C:\excel\dataI.xlsx") <> "" Then
Workbooks.Open "C:\excel\dataI.xlsx"
Else
End If
Next I

End Sub

これだとエラーは出ませんが、どのファイルも開きません
Iが文字として認識されているためにelse条件に引っかかっているのだと
思うのですが、ファイル名中のIを変数として認識させる方法はないでしょうか?
同じフォルダ中のファイルをすべて開く方法ならあるようですが、それだと意味が
ないのです。わかる方がいましたらよろしくお願いいたします。
945デフォルトの名無しさん:2014/06/10(火) 03:33:00.72 ID:hc4LiDN+
>>944
Sub test()
  Dim I As Integer
  For I = 1 To 4
    If Dir("C:\excel\data" & I & ".xlsx") <> "" Then
      Workbooks.Open "C:\excel\data" & I & ".xlsx"
    End If
  Next I
End Sub
946デフォルトの名無しさん:2014/06/10(火) 04:40:54.93 ID:ZdnvVnA2
Dir使うなら、ワイルドカードを使ったこんな方法もある

Dim fn As String
fn = Dir("C:\excel\data*.xlsx")
Do Until (fn = "")
  If fn Like "data#.xlsx" Then Workbooks.Open "C:\excel\" & fn
  fn = Dir()
Loop

C:\excel 内の data数字.xlsx を全て開くというもの

まあ、「同じフォルダ中のファイルをすべて開く」の発展型みたいなもので
同じ方式を使いながら、対象を「すべて」ではなくDirとLikeで絞り込むだけの話
947デフォルトの名無しさん:2014/06/10(火) 10:36:42.20 ID:zXPv5kx2
>>945
ありがとうございます
Iを"と&amp;で挟むことは私も試したんですが、エクセルは両方で挟むんですね
これで行けそうです

>>946
ありがとうございます
今回はちょっと事情が特殊なんですが、普通ならこっちのほうがスマートな気もしますね。
勉強になりました。
948デフォルトの名無しさん:2014/06/12(木) 22:39:19.22 ID:JGtl8L6J
日別の購入データの通し番号から、マスターを参照してジャンル分けして、ジャンルごとの合計金額を出したいです。

http://light.dotup.org/uploda/light.dotup.org28231.png

データはこのような画像の通りにシート3つに分かれて存在しています。
どのようなマクロを組めばいいかお教え願いたいです。
ジャンルごとに変数というものを持たないといけないのでしょうか?
実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・
大変面倒な質問ですが、お願いします

具体的なコードを教えてください
本当に困っていますお願いします
949デフォルトの名無しさん:2014/06/12(木) 23:30:41.76 ID:Edw1tGKl
>>948
丸投げしたいのなら、完全な状態のブックをどっかにアップしてください
本当に困っていますお願いします
950デフォルトの名無しさん:2014/06/13(金) 14:09:52.76 ID:+wg+XXRx
 
>>1
> ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
>    コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
>    ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
951デフォルトの名無しさん:2014/06/13(金) 14:29:39.15 ID:QETwEf+A
>>949-950
本スレとマルチだし、向こうでかなり暴れてたから
もうこっちには来ないと思う。
952デフォルトの名無しさん:2014/06/14(土) 13:12:04.56 ID:i5Ueiwm/
プリンターの無い家で印刷に関するマクロを組みたいのですが
印刷の代わりに使える分かりやすい言葉はないですか?
953デフォルトの名無しさん:2014/06/14(土) 14:15:23.09 ID:NIfTAMoH
>>952
バーチャルプリント
954デフォルトの名無しさん:2014/06/14(土) 14:54:03.19 ID:i5Ueiwm/
>>953
如何にもな言葉してますね…
ありがとうございます助かりました!
955デフォルトの名無しさん:2014/06/24(火) 08:53:44.32 ID:A58N03NN
セルに「hoge hoge、huga huga」みたいに入力されていて、
先頭の文字と「、」の後の一文字だけ大文字にすることってできるかな?

PROPERを使うと、Hoge Hoge、Huga Hugaみたいになるし、
UPPERは特定の文字だけ変換する方法わからんし、
できれば関数で簡単に処理したいんですが、無理かな?
956デフォルトの名無しさん:2014/06/24(火) 09:44:48.41 ID:qWqYgHU9
>>955
普通に「、」でSplitして、ループ内で1文字目だけ大文字に変換して、Joinで再連結すればいいんじゃね?
関数にしたいなら、それを関数として定義すれば良いだけのことだし

1文字目だけ大文字にする方法はいくつかあるが
Midの関数ではなくステートメントの方を使うのが簡単かもな
957デフォルトの名無しさん
>>956
そっかー。
簡単にできる関数が用意されてないかな?と思ったんだけど、無いんだね。

わざわざVBA作るほど沢山あるわけじゃないから、手で治すことにするよ。
アドバイスごち