トップページtech
1001コメント350KB

Excel VBA 質問スレ Part32

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2013/10/07(月) 22:19:55.86
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/
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2013/10/07(月) 22:21:12.68
あっちはコード作成依頼スレ
http://toro.2ch.net/test/read.cgi/tech/1381151717/
0004デフォルトの名無しさん2013/10/07(月) 22:35:27.60
テンプレ終了
0005デフォルトの名無しさん2013/10/08(火) 07:40:28.60
>>1★5は「コードを書いてはいけません」という意味です。
経緯は過去ログを見てください。

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

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

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

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

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

ソース全体での使われ方を見ないで単に変数の長さだけを問題にするやつは相手にする価値はない
0015デフォルトの名無しさん2013/10/26(土) 18:52:49.90
こっちに書くってのはいいね
0016デフォルトの名無しさん2013/10/26(土) 18:58:12.17
>>14
俺もそれに完全に同意。
0017デフォルトの名無しさん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も
当てはまりそうなんで載せとくよ。
0018デフォルトの名無しさん2013/10/26(土) 19:34:25.93
256 :デフォルトの名無しさん:2013/10/26(土) 19:22:27.05
  >>252
  公開範囲考えるなら可読性も考えろよ。
  関数が短いからと言っても処理を見るまで分からないものは可読性は低い。
  1文字変数をよしとするとそれ以外の変数と混在させそう。
  こうなると、作り手が何考えてるのか分からなくなる。
  知らないうちにバグを埋め込むことになってるって意識ないんんだろうなぁ。

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

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

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

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

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

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

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

だから1文字変数使っても可読性落ちないってば
0031デフォルトの名無しさん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
0032デフォルトの名無しさん2013/10/26(土) 23:05:30.25
アルゴリズムアルゴリズムしたプログラムは変数名長くしてもニュービーにはどんな処理やってるかわからないからなあ
逆にそのアルゴリズム知ってる奴からすれば変数名は関係なくコードの形だけでやってることは把握できるし
0033デフォルトの名無しさん2013/10/26(土) 23:26:37.64
287 :デフォルトの名無しさん [↓] :2013/10/26(土) 23:24:28.02
  >>286
  今更何言ってんだ?w

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

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

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

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

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

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

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

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

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

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

>>63
こら
0065デフォルトの名無しさん2013/11/22(金) 11:38:40.76
for next〜end enxtってなんだ
初心者にいいかげんなこと教えるなよ
VBAはFor〜Nextだぞ
0066デフォルトの名無しさん2013/11/22(金) 11:55:12.50
>>65
ちょっとしたタイプミスぐらいに目くじらを立てんなヴォケ
それくらい判るだろ、低能
0067デフォルトの名無しさん2013/11/22(金) 11:56:27.76
と思ったらちょっとしたタイプミスではなかった^^;
ま、判ってるからいいだろ w
0068デフォルトの名無しさん2013/11/22(金) 13:01:17.73
For ...
 ...
 If ... Then GoTo LOOPEND
 ...
LOOPEND:
Next
0069デフォルトの名無しさん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/
0070デフォルトの名無しさん2013/11/22(金) 13:22:55.41
>>69
一人でやってろカス
0071デフォルトの名無しさん2013/11/22(金) 13:39:06.67
>>70
Part32時代に、ほとんどの人がこのスレ>>1を忌避し、もう一つのスレしか使ってません。
よって、一人ではありません。

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

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

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

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


わからないだけのくせにwちなみにこいつはテンプレ厨、このスレを建てたやつですww
0089デフォルトの名無しさん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
0090デフォルトの名無しさん2013/11/23(土) 09:50:16.17
答えようとしたけど頓珍漢なこと言って
カッコつけて逃げようとしたけどバレて
ファビョって荒らす ←いまここ

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


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

複数アクセス状態で実行したらどうなるか知らんけど
Workbook.ExclusiveAccessdsで共有解除できるらしいから試してみたら?
0094デフォルトの名無しさん2013/11/24(日) 19:22:18.42
>>92
共有するのはダメなん?
0095デフォルトの名無しさん2013/11/24(日) 20:09:30.78
数値が文字列として保存されてるセルを
すべて普通の数値に変換するためにはどうすればいいですか?
対象はアクティブになってるシートのすべてのセルでそうなってるものすべて。
0096デフォルトの名無しさん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
数値の判定とかいろいろ細かい考慮点はあるかもしれんがしらん
0097デフォルトの名無しさん2013/11/24(日) 21:38:28.16
>>95
全てのセルに対して値が数値であるかどうかみて数値だったら書式を変更すればできるんじゃないの?
0098デフォルトの名無しさん2013/11/24(日) 21:45:22.51
>>96>>97
それじゃできないんですけど。

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

結果がたくさん出る→選ぶ→読む→実行する→結果を確認する
ここまでできて初めて解決と言える
最低でも数分はかかる
0102デフォルトの名無しさん2013/11/25(月) 08:56:08.33
くだらね小学生かよ
0103デフォルトの名無しさん2013/11/25(月) 09:03:11.16
作業工程と所要時間は正確に見積もりましょう
0104デフォルトの名無しさん2013/11/25(月) 11:28:49.74
度数分布表から平均値と標準偏差を算出する一発で算出する方法はありますか?
0105デフォルトの名無しさん2013/11/25(月) 11:35:06.08
そういう関数なりプロシジャなりを作ればいい
0106デフォルトの名無しさん2013/11/25(月) 12:49:38.62
つまりないということですね
わかりました
0107デフォルトの名無しさん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
という値がそれぞれ入っています
0108デフォルトの名無しさん2013/11/26(火) 11:51:02.51
tokei_bookに拡張子いるんじゃね
01091072013/11/26(火) 11:54:18.06
あら、ほんとだ & ".xlsx" にしたら出来た^^;
んん、ありがとうございます
0110デフォルトの名無しさん2013/11/29(金) 14:28:14.19
VBEの入力支援に出てくるアイコン?のようなものってそれぞれ意味あるかしら
0111デフォルトの名無しさん2013/11/29(金) 15:20:53.25
どうかしらね
しらべてみるわ
0112デフォルトの名無しさん2013/11/29(金) 19:04:14.25
ヘルプやオブジェクトブラウザとかで使われてるアイコンと同じだろ
クラス、メソッド、プロパティ、定数、列挙 ほかなんか有ったっけ
0113デフォルトの名無しさん2013/11/29(金) 19:54:59.51
アイコンは16年位の歴史がある
0114デフォルトの名無しさん2013/11/29(金) 20:29:49.82
アイコン16歳?
0115デフォルトの名無しさん2013/11/29(金) 21:00:05.10
>>113
>>114
おもろいやんけ
0116デフォルトの名無しさん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
おもろいやんけ
0117デフォルトの名無しさん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側の問題かもしれませんが、宜しくお願い致します。
0118デフォルトの名無しさん2013/11/30(土) 10:53:47.24
>>117
再現が面倒なので試さずに適当に答えるけど
プロセスが終了した時のウィンドウの順番をWindows任せにしないで、
Javaアプレット側のTerminateイベントでExcelのウィンドウをアクティブにしてから抜けるようにするか
VBAで自分自身を最前面にするか、どっちでも行けるんじゃないかと思う
AppActivate試してみ
0119デフォルトの名無しさん2013/11/30(土) 12:33:56.02
>>118
ありがとうございます。
試してみます。
0120デフォルトの名無しさん2013/12/03(火) 15:30:44.33
数万行×数百列の2次元配列arrで
arr("りんご","色")としたら、"りんご"行の"色"列の値が取り出せるようにしたいです。
Enumがそれっぽいですが、"りんご"や"色"の位置はあらかじめ決まってなくて
Enum宣言時に値を入力できません。どうすればいいですか。
0121デフォルトの名無しさん2013/12/03(火) 16:45:56.53
>>120
find or filter
0122デフォルトの名無しさん2013/12/03(火) 18:00:28.45
>>120
>>121
★3、★4に明確に違反しています。スレ違いです。
0123デフォルトの名無しさん2013/12/03(火) 21:27:43.18
>>122
必死だなw
0124デフォルトの名無しさん2013/12/03(火) 22:47:21.25
VSTOはどこで聞くのがいいんだろう
0125デフォルトの名無しさん2013/12/04(水) 05:41:42.67
それぞれの言語のスレか、VSスレかじゃないかね
0126デフォルトの名無しさん2013/12/04(水) 06:12:37.46
>>120
その2次元配列とやらのデータは元々シートに書かれてるの?
0127デフォルトの名無しさん2013/12/04(水) 10:05:10.57
白桃の臭い
0128デフォルトの名無しさん2013/12/04(水) 23:35:56.61
>>125
ありがとう。
0129デフォルトの名無しさん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
0130デフォルトの名無しさん2013/12/07(土) 23:07:01.61
>>129
yes
0131デフォルトの名無しさん2013/12/07(土) 23:24:16.83
>>129
オープンしておけばアクティブにしなくてもアクセスできる。
Workbooks("ブック名").Sheets("シート名").Range("A1").Value

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

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

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

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

ってかさ、明確に違反しているっていうのは一方的な見方でしかない。
作り方によっては★3、★4に全く違反しないように作れるわけだが。
0134デフォルトの名無しさん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を返すんだけど、
> これの使い道って何か有る?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例えばある変数xの数だけ、LabelとTextのペアを位置を計算してUserformに貼り付けるといったことをしたいです。
0165デフォルトの名無しさん2013/12/12(木) 11:49:05.91
無理
01661642013/12/12(木) 12:05:18.41
じゃあどうすればいいですか?
最大100組使用する可能性があれば100個とりあえず配置しておいて
コードで使うやつだけを表示させ残りは非表示にしないといけないですか?
0167デフォルトの名無しさん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
0168デフォルトの名無しさん2013/12/12(木) 14:13:18.74
>>167
ありがとうございます!

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

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

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

入門書を買って、読んだほうが速い
総合的・段階的に学べるし
0186他のブックのセルからコピペするコード2013/12/14(土) 14:42:31.13
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 の型がエラーを起こしますが
何という型にすればいいのでしょうか?(無提議で動いてますが)

また上記のコードをなるべく変数を使わずにもっと完結に記述することは可能でしょうか?
宜しくお願い致します。
01871862013/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
参考にしたサイトが悪かったのか・・ なんで変数を使って解説してるのか謎です、、
0188デフォルトの名無しさん2013/12/14(土) 16:28:59.64
そのサイトが何をなぜ変数を使って説明してるのかしらんが
"変"数だからな
プログラム中で中身変えたり、使いまわしたりするのに都合がいいから使うんだよ
そう言った事が全くなければ変数なんていらんが、そう言うプログラムはあんまりない
0189デフォルトの名無しさん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では非常に有効なテクニックでもある。
0190デフォルトの名無しさん2013/12/14(土) 18:21:29.08
配列にして操作するのは、高速化としては有効なテクニックではあるが
それを本来の目的って言うのは違うだろ
0191デフォルトの名無しさん2013/12/14(土) 18:43:33.71
配列がどのような仕様かを知りたいのですが
一番うまくまとまっている解説サイトはどこですか?
01921862013/12/14(土) 19:29:03.71
>>189
>>188
ご丁寧な解説ありがとうございます。大変勉強になりました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

俺ならEXCELで配布するならそのブックだけで完結するようにするが
区分の管理は一括なのかローカルなのかとか、色々考える事が多くて何とも言えん
まあ、好きなようにしろとしか
0232デフォルトの名無しさん2013/12/19(木) 18:24:22.86
アドインにしとけ
0233デフォルトの名無しさん2013/12/20(金) 16:12:59.17
大学生でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
0234デフォルトの名無しさん2013/12/20(金) 16:33:59.75
>>233
普通は、計算誤差というものに思いを馳せる
0235デフォルトの名無しさん2013/12/20(金) 16:39:27.59
>>234
レスありがとうございます
もしあなたが先生だったら回答はどちらにしますか?
0236デフォルトの名無しさん2013/12/20(金) 16:43:08.85
って先生に聞いたほうがいいのでは?
0237デフォルトの名無しさん2013/12/20(金) 16:48:03.00
>>285
1 / 3 * 3を計算して下さい。
0238デフォルトの名無しさん2013/12/20(金) 16:56:45.30
>>236
もう冬休み入っちゃって。
あーもう単位落としそうで心配だよお
0239デフォルトの名無しさん2013/12/20(金) 17:50:29.51
17歳@女子高生なら考えてやったのに
0240デフォルトの名無しさん2013/12/20(金) 18:07:18.65
最近OLちゃんが来なくて寂しいわ
0241デフォルトの名無しさん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ブロック変数が設定されていません
ってエラーが←のところで発生します。
0242デフォルトの名無しさん2013/12/20(金) 18:14:17.26
="2012/3/01"
="2012/3/1"
02432412013/12/20(金) 18:20:00.05
え〜と、すいませんが変わらずです。
テスト用のシートではその日付はA80にあるんですがね
0244デフォルトの名無しさん2013/12/20(金) 18:24:49.95
VLOOKUP
0245デフォルトの名無しさん2013/12/20(金) 19:39:52.68
=#2012/03/01#
02462412013/12/20(金) 19:50:43.16
日付を"#"で囲ったら行が取得出来ました。へぇ。
ありがとうございます >>245
02472412013/12/20(金) 20:20:20.05
すいません、もう1つ追加で教えてください^^;。
日付を変数として先ほどのものに与えるのはどうするんでしょうか?
Dim dt as Date
として
dt = 日付
Set target = Range("A3:A150").Find(What:=#dt#, LookIn:=xlValues, LookAt:=xlWhole)
とすると構文エラーになるんですが。
0248デフォルトの名無しさん2013/12/20(金) 20:35:51.50
女子高生です高校でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
0249デフォルトの名無しさん2013/12/20(金) 20:57:48.50
>>247
「#〜# で囲む」 と「"〜" で囲む」 の意味の違いが判っていないからその質問になる。
02502412013/12/20(金) 21:27:42.49
#〜#で囲むのを初めて知ったんですが、どう違うんですか?
0251デフォルトの名無しさん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,・・・・
と同じことになる

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

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

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

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

Wordにはページの上から下へそのまんま東の順番で並べ、表と表の間は改行を1行だけ挿入します。
0261デフォルトの名無しさん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
0262デフォルトの名無しさん2013/12/21(土) 16:58:15.50
リストボックス enabled false にしても
スクロールも選択もできなくはなるけど
リストはグレーアウトしないの?

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

Selection.Copy Destination:=Word.Documents(1).ActiveCursor
0265デフォルトの名無しさん2013/12/21(土) 21:18:08.98
>>264
多分ワードに直接貼り付けとか出来ないと思う
一旦クリップボード経由させるのが楽なんじゃね
02662452013/12/22(日) 05:28:39.37
>>251
初心者に、型にかかわる説明してるのに、暗黙の変換つかうなよ
0267デフォルトの名無しさん2013/12/23(月) 01:32:23.38
すみません。質問ですが、
ユーザーフォームにコマンドボタンAとBがあって
Aをクリックするとデータの抽出
Bをクリックするとデータを抽出した後、特定のデータに色をつける
この場合、BにAと同じ構文を書いた後、色付けしてるのですが
省略ってできないでしょうか?
あまりに長くなるのでなんとかしたいです
0268デフォルトの名無しさん2013/12/23(月) 03:31:36.24
>>267
「Sub 抽出」を用意しといて、Aからは抽出を呼び出すだけ
Bは抽出を呼んだあと色付けするようにプログラムを作ればいい
0269デフォルトの名無しさん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
0270デフォルトの名無しさん2013/12/23(月) 10:39:37.72
思うにで少し解説しておく
0271デフォルトの名無しさん2013/12/23(月) 14:10:40.00
普通はチェックボックス使うよな
0272デフォルトの名無しさん2013/12/23(月) 16:33:14.05
>>268-269
ありがとうございました。
全体がすっきりしました。教えてくれた方、素敵です。
0273デフォルトの名無しさん2013/12/24(火) 12:07:04.76
初期状態のFormのプロパティ群をコードで設定することは可能ですか?
0274デフォルトの名無しさん2013/12/24(火) 12:08:07.16
FormのCommandButtonのCaptionの表示を左寄りにしたいんですが、どうやりますか?
いつも中央に寄っています。
0275デフォルトの名無しさん2013/12/24(火) 16:22:57.85
>>274
VBAのフォームのコマンドボタンではTextAlignプロパティが公開されていないので無理です
テキストの後ろにスペースを足して、左に寄っているように見せかけるか、ボタンの上にラベルを貼るか
最初からラベルだけにしてボタン的な使い方をするかしてください
0276デフォルトの名無しさん2013/12/24(火) 21:56:14.31
ボタン表面と同じ色の適当なサイズのBMP画像を作り、「Picture」プロパ
ティでボタンに貼る。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[正しい使い方] (マラソンで)コケちゃいました。
0335デフォルトの名無しさん2014/01/04(土) 15:29:14.77
>>334
別に紛らわしくはないよね。揚げ足どりやめようよ。
0336デフォルトの名無しさん2014/01/04(土) 15:53:45.27
>>335
これが正しい用法だ。
http://www.youtube.com/watch?v=z8PbFRV287c
0337デフォルトの名無しさん2014/01/04(土) 16:12:51.03
正しい用法についてはもよりの日本語学校の先生にご相談ください
0338デフォルトの名無しさん2014/01/04(土) 16:53:32.53
プログラミング言語扱ってると自然言語にも厳しくなってしまうので気を付けないとね
0339デフォルトの名無しさん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 "アホ"でいい。

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

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

Dim b() as String
の場合、b(1)=・・・、b(2)=・・・と代入しようとするとエラーがでてエラいこっちゃとなります(いま話題の「インデックスが有効範囲にありません」のエラー)。
それなら動的配列の意味ないじゃん?と思いますが。
0369デフォルトの名無しさん2014/01/07(火) 15:10:39.77
VBAのクラスモジュールの存在意義を教えてください。
これはどのVBAの本を読んでも載っていないんですよね。
他の言語では使われてるらしいけど(ちなみにわたしは他言語は全く知りません)。
0370デフォルトの名無しさん2014/01/07(火) 16:07:00.18
>>367
年末〜年始の授業が乱数、教師はここを含めて見てる
ここで教えてもらったの提出しても点数貰えないよ
2012年にも、ネットで得たのを、そのまま提出した生徒がいた
03713672014/01/07(火) 16:09:30.50
>>370
そんなこと言わず早く教えてくれよ。
あしたがしめきりなんだよ!
先生はこんなところ見るような人じゃないんで大丈夫だよ。
0372デフォルトの名無しさん2014/01/07(火) 16:29:51.49
>>368
>>369
さすがにggrks
03733682014/01/07(火) 18:04:42.24
>>372
そんなのイヤなこった、パンナコッタ。
0374デフォルトの名無しさん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
03753672014/01/07(火) 18:22:42.41
>>374
ありがとう。
ちょっと動作確認してみます。

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

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

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

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

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

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

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

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

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

これ、それぞれで別の方法で比較するにはどうすればいいですか?
04003992014/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"を比べたとき別モノと判断するんですよ。
04013992014/01/10(金) 19:31:27.34
まっさきに思いつくのは
・関数で全部大文字にしてから比較
という方法だけど、もっと手軽な方法があるかと思って。
0402デフォルトの名無しさん2014/01/10(金) 19:42:47.15
正規表現
04033992014/01/10(金) 19:47:23.74
とは何ですか?
0404デフォルトの名無しさん2014/01/10(金) 19:56:04.73
option にありそうじゃね
VBEで適当なところにoptionと入力してカーソル合わせてF1キー押して調べて教えて
0405デフォルトの名無しさん2014/01/10(金) 20:19:55.33
StrComp
0406デフォルトの名無しさん2014/01/10(金) 20:46:23.15
>>399
> たぶんほとんどの人が知らないでしょう。
いや、使ってみればわかるんだから、普通知ってるって

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


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


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

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

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

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

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

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

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

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

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

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

まぁ他にも配列や連想配列を返すとか、グローバル変数を介するとか
いくらでも方法はあるけどね
0433デフォルトの名無しさん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以上あり手で消すのは現実的ではありません
除外する方法を色々考えましたがすぐ出来そうで簡単にはできないようで行き詰まりました。
宜しくお願い致します。
0434デフォルトの名無しさん2014/01/11(土) 22:10:53.29
>>433
調査結果が得られたかどうかはどうやって判断するんだ?

つか、VBA使わんでも、その条件でフィルタかければ良いだけな気はするがな
0435デフォルトの名無しさん2014/01/11(土) 22:19:02.70
>>430
複数の戻り値っていうのが同じ方(例えば二つの数値とかだったら、
数値型の配列を返すとか。
04364332014/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から上の数値を間引く方法もわからない感じです、、
0437ピラフ2014/01/11(土) 22:25:15.62
          ____
        /      \
       /  ─    ─\
     /    (●) (●) \
     |       (__人__)    |
      \      ` ⌒´   ,/
      /         ::::i \
     /  /       ::::|_/
     \/          ::|
        |        ::::|  キュム
        i     \ ::::/ キュム
        \     |::/
          |\_//
          \_/
04384332014/01/11(土) 22:48:47.30
>>433
>>435
素人なりに1つだけ思いついた方法は
結果値の表番号を一つ一つサーチして該当する行を1行削除するを繰り返し
削除後にソートして寄せると完成しますが 
数百回処理を繰り返す必要がり力業っぽい
のでこのやり方は違うかなと思いました
0439デフォルトの名無しさん2014/01/11(土) 23:13:09.99
数百回くらいなら昨今のPCなら全然問題ないレベルでしょ
その程度の処理量を更に削る為に労力を使う方が、初心者らしい愚行だよ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

まさか、1から全部コード書いて差し出せとか言わないよね?
04704682014/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
=====================================
0471デフォルトの名無しさん2014/01/18(土) 17:02:29.21
>>470
つ ImageMagick

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

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

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

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

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

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

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

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

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

> あとクラス毎にモジュール作ることになるけどモジュールを階層で管理する機能とかないから面倒だし
機能毎にアドインにまとめればいいんじゃないかな。
0507デフォルトの名無しさん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

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

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

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

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

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

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

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

素直でよろしい
0534デフォルトの名無しさん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
0535デフォルトの名無しさん2014/01/22(水) 13:42:42.47
>>532
> 移譲はあくまで移譲であって、継承の代用に出来る場合があるだけで
> 用語の違いとかじゃなくて、そもそもが全くの別物だろ。

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

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




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

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

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

もうここから違うし (w
0556デフォルトの名無しさん2014/01/23(木) 18:13:05.91
スクロールバー動かすとか
0557デフォルトの名無しさん2014/01/23(木) 18:14:28.47
>>540
> まあ、C#A を実装すればこんな不毛な争いは起きないので、早めに頼むよ ⇒MS
こういうの使えば?
ttp://outofmem.tumblr.com/post/62233308198/excel-dna-1
0558デフォルトの名無しさん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.処理を終了する。

多分こんな感じでループを使わないで出来る・・・ような気がする。
0559デフォルトの名無しさん2014/01/23(木) 20:25:59.04
>>557
いいねコレ、Linqも使えるのか。
ぱっと見た目、WorkSheetsもジェネリック扱いっぽいし。
ってことは多分、列や行もそんな扱いなんだろうね。
後は仕事場で使う許可が下りるかどうかだけど。
05605492014/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
0561デフォルトの名無しさん2014/01/23(木) 23:59:48.40
>>560
それで、だからどうしたの僕ちゃん
ほめて欲しいのかちゅら
すご〜イ、良く頑張ったわね、偉いわよ僕ちゃん
0562デフォルトの名無しさん2014/01/24(金) 00:03:57.36
へぇ、これは自演だったとしても凄いな。
次は30行でテトリス作ってみてよ。
0563デフォルトの名無しさん2014/01/24(金) 01:24:52.94
ここは質問スレだよ?雑談はどっかあっち行って
0564デフォルトの名無しさん2014/01/24(金) 01:26:27.06
>>563
自治厨うぜーぞ
誰もお前なんか必要としてないんだから早く消えろ
0565デフォルトの名無しさん2014/01/24(金) 01:55:32.38
ゴミじゃん
0566デフォルトの名無しさん2014/01/24(金) 07:27:32.48
>>560
ドヤ顔のとこ悪いけど、それって上と左に飛ばす対象セルの
下や右に入ってる値の入っているセルも一緒にずれない?
そうだとしたらコードもダメだけど、動作確認もダメダメだね。
0567デフォルトの名無しさん2014/01/24(金) 10:57:23.36
え?
0568デフォルトの名無しさん2014/01/24(金) 11:55:35.88
>>560
ゴミコードw
0569デフォルトの名無しさん2014/01/29(水) 23:46:00.47
VBAをある程度マスターしたいので
こんどはスマホで自作アプリをいっぱい作りたいです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

アルゴリズムを詰めていって最適化する話は余所でどうぞ
0625デフォルトの名無しさん2014/02/03(月) 21:33:50.25
またお前かという感じ
0626デフォルトの名無しさん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個の重複しない乱数を求めるには
どういうコードを書けばいいですか?

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


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

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

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

数学的に言えば確率論の中の順列の問題
ビンゴとサイコロの違いと言えばわかりやすい
質問者がわかってない
0645デフォルトの名無しさん2014/02/06(木) 13:55:18.98
そろそろ別の所でやって
0646デフォルトの名無しさん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
0647デフォルトの名無しさん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月」の未発表数値を前年同月と同一と仮定
0648デフォルトの名無しさん2014/03/06(木) 23:19:40.48
質問させていただきます。

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

こんな感じで、Bの1700行まで関数が一行置きに入っているのですが、セルの結合を二行ずつしたいと思っています。
どういう風な記述になりますでしょうか?
0649デフォルトの名無しさん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
0650デフォルトの名無しさん2014/03/07(金) 00:51:11.60
>>649
ありがとうございます!!!

もうひとつお聞きしたいのですが、、、
0651デフォルトの名無しさん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
0652デフォルトの名無しさん2014/03/07(金) 01:04:46.69
H列に数値を入力したらG列に計算結果を表示するのですが、切り捨てにするにはどうすればよろしいでしょうか?
0653デフォルトの名無しさん2014/03/07(金) 07:39:53.10
vba 切捨て でぐぐればいっぱい出てくる
0654デフォルトの名無しさん2014/03/07(金) 08:25:53.28
VBの丸めは五捨六入だっけ?銀行丸めっつうの?
どハマりして結局関数を作った記憶があったようななかったような

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

あとお節介だけど、プログラムが全く理解できてないみたいだけど、知識をつける必要がないのなら構わないけど、自分で調べた方がいいよ
0655デフォルトの名無しさん2014/03/12(水) 01:22:26.84ID:x9JPMObJ
無いに決まってるから聞いてんだろ。
おせっかいウザイ。さっさと回答くれ。
0656デフォルトの名無しさん2014/03/12(水) 01:45:28.79ID:ZXRx46ei
IDつけたのか
てすてす
0657 【9.6m】 2014/03/12(水) 01:46:00.18ID:ZXRx46ei
にょろーん
0658デフォルトの名無しさん2014/03/12(水) 11:47:45.36ID:4Vi2bcOW
>>657
コラ。にょろーんとするな。
0659デフォルトの名無しさん2014/04/03(木) 10:09:06.33ID:Eig24VSK
セルのプロパティでFormulaやFormulaR1C1はどんな使い方をするのでしょうか?
いまいちよくわからないのですが。
0660デフォルトの名無しさん2014/04/03(木) 10:15:53.71ID:4gfcVwhu
>>659
VBAからワークシートの数式を書き換えることができる
オートフィルでは思った通りに変化してくれないような時に、VBAを使って数式を自動生成する
0661デフォルトの名無しさん2014/04/03(木) 10:29:44.67ID: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"になってる?
0662デフォルトの名無しさん2014/04/03(木) 10:30:42.30ID:Eig24VSK
このへんの仕組みというか仕様を超わかりやすく解説してくれてるサイトか本みたいなのがあれば世の中が過ごしやすくなってよいのですが・・・
0663デフォルトの名無しさん2014/04/03(木) 11:19:42.03ID:Mk1UvHnq
スレチだったら誘導してください。ごめんなさい。

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

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

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

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

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

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

でも

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

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

VBEで以下の不満があり、関数のアウトライン機能がないこと、列挙体変数をTabで選択せずそのまま入力するとその入力された変数名に変更されてしまうなどがあり、困ってます
0672デフォルトの名無しさん2014/04/05(土) 20:52:49.41ID:vxn3S8/H
>>671
VisualStudioのVBのエディターで書いてからコピペとかたまにやるけど常用はしてない
普段は普通のテキストエディター
0673デフォルトの名無しさん2014/04/06(日) 00:14:11.80ID:6QPkQ4Uq
>>672
なるほど、確かにVSのアウトライン機能は便利ですもんね…
でもアウトライン機能を常用出来るようなテキストエディタはやはりないんですかね
ありがとうございます。
0674デフォルトの名無しさん2014/04/06(日) 20:31:36.34ID: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
になってしまいます

似たような方いらっしゃらないでしょうか
0675デフォルトの名無しさん2014/04/06(日) 21:05:33.20ID:X8q2hYwd
>>674
オーバーランしてるんじゃねーのか?
まずは、Debug.Print rdat して、読み取りがおかしいのか、セルが書き変わってるのか切り分けなよ。
0676デフォルトの名無しさん2014/04/06(日) 21:38:35.38ID:SRPo3hu2
>>675
イミディエイトには
511,476
511,476
5
11,476
となってるので読取がおかしくなっているようです
0677デフォルトの名無しさん2014/04/07(月) 00:32:05.86ID: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の仕様でしょうか
0678デフォルトの名無しさん2014/04/07(月) 01:09:45.66ID:cIwL+5uV
>>677
バイナリで改行コードをチェック
0679デフォルトの名無しさん2014/04/07(月) 18:12:05.76ID:NRYmRN39
バイナリで保存してみたところ中身に改行コードはありませんでしたが
テキストファイルで保存すると改行されています
0680デフォルトの名無しさん2014/04/07(月) 19:44:01.79ID:cIwL+5uV
改行される部分に改行以外の何かのデータが入ってない?
文字列の先頭から文字コードを順番に表示させてみ
0681デフォルトの名無しさん2014/04/09(水) 02:10:23.95ID:Zgg01Tu3
IIF(data=0, 0, 1/data)
dataが0だとエラーになります。回避するには大人しくIf elseにするくらいしかないですか?
0682デフォルトの名無しさん2014/04/09(水) 02:48:42.35ID:rPGWVgOi
>>681
回避する方法はほかにもある
たとえばOn Errorとか、IIfの入れ子とか
Ifで書く場合もElseは必須じゃないし
0683デフォルトの名無しさん2014/04/09(水) 02:59:54.43ID:BMFTF5hJ
>>681
VBAはショートサーキットしないから、素直にIFネストしといたら良いんじゃね
セルに計算式埋め込んでIfErrorとかIsErrorとか使えば何とかなるかもしれんが
0684デフォルトの名無しさん2014/04/09(水) 03:30:52.75ID:rPGWVgOi
>>683
今回のIIfのエラーとショートサーキットは関係ない
IIfは単なる関数だから、呼び出し前にすべての引数が評価されるだけのこと
0685デフォルトの名無しさん2014/04/09(水) 04:08:35.13ID:Zgg01Tu3
レスありがとうございます。
IIFの入れ子だけでエラー回避出来るんですか?思いつかないです。ヒント下さい。
0686デフォルトの名無しさん2014/04/09(水) 04:18:43.85ID:rPGWVgOi
>>685
ヒントは>>684
IIfは関数だってこと

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

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

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

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

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

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

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

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

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

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

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

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

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

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

しかしここで問題が。

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

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

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

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

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

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

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

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

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

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

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

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

変わる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

データの引きまわしにクラス使う事も否定しないが、クラス内の処理が隠蔽できることと
引数にクラス渡す事はあんまり関係がない
0779デフォルトの名無しさん2014/04/25(金) 23:59:24.15ID: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
0780デフォルトの名無しさん2014/04/26(土) 00:16:58.54ID:QnRpwcSp
VBAでオブジェクト指向のClassってどう使うの?
本屋でみるVBAの本には一切記載がないと思うんですが。
標準モジュールの下にあるクラスモジュールっていうの使うの?
0781デフォルトの名無しさん2014/04/26(土) 00:36:21.25ID:/0bFGV1l
そうだよ
0782デフォルトの名無しさん2014/04/26(土) 01:03:15.45ID:m5B7q/+H
>>778
継承は確かに便利だけど、
それも時と場合によってそれを使うことが
本当に望ましいのか判断しないといけない。
ましてやVBAはインターフェイスはあっても継承が使えないという不思議な言語だから
コンポジションとか結構重要だよ。
0783デフォルトの名無しさん2014/04/26(土) 10:46:40.74ID:3e8mN1Ca
>>778
単なるユーティリティレベルのサブルーチン集で充分なのに、わざわざクラスにしてどやってやってるだけでしょ
そのうち我に返るだろうから、スルーで桶
0784デフォルトの名無しさん2014/04/26(土) 18:04:27.56ID:m5B7q/+H
クラスにしたのは複数の位置情報を
纏めて設定しておいて、実際にシートに書く時の処理と切り分けをすることも
出来るようにするという思慮もあるんだよ。
たかがクラスをちょっと持ち出したくらいでまるでトラウマのように火病る人っているよね。
普段使っている標準モジュールですらシングルトンのクラスでしかないというのに。
0785デフォルトの名無しさん2014/04/26(土) 18:55:20.55ID:QnRpwcSp
シングルトンのクラスとは?
0786デフォルトの名無しさん2014/04/26(土) 18:59:29.87ID:oNLUt8q5
シングルトンのクラスとは?とは?
0787デフォルトの名無しさん2014/04/26(土) 19:08:57.24ID:QnRpwcSp
シートが3つあって
Sheet1はA1に
Sheet2はA2に
Sheet3はA3に
それぞれ選択状態にしておいた場合
その各シートで選択されているセルのアドレス情報をGETするにはどういうコードでできますか?

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

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

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

いったいどうやるんだったっけ?
そのActiveWindowというプロパティをいじったような気もするようなしないような・・・
0796デフォルトの名無しさん2014/04/27(日) 19:40:21.18ID: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&"▲"  ←これを入力した時点でエラー
0797デフォルトの名無しさん2014/04/27(日) 19:50:23.93ID: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
0798デフォルトの名無しさん2014/04/27(日) 19:57:39.29ID: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
0799デフォルトの名無しさん2014/04/27(日) 21:29:59.52ID:SP8zGQAF
>>796
文字列を連結する時、「&」の前後のスペースは省略できない
ここだけは自動でスペースが入らなくて、自分で入れないとエラーになる
0800デフォルトの名無しさん2014/04/27(日) 21:48:27.57ID:SP8zGQAF
もっと厳密に言うと、入力を省略できないのは「&」の前のスペース
後ろのスペースは条件次第で省略できる
今回の質問では2箇所とも後ろのスペースが自動補完されるパターン

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

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

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

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

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

そら大丈夫なコードもたくさんあるだろうけど、ダメな場合もあるんで、
特別な事情がない限りはSubはSubのまま使った方が安全
0812デフォルトの名無しさん2014/04/29(火) 00:29:30.69ID:jGZw12rc
>>811
え?
ダメな場合って例えば?
0813デフォルトの名無しさん2014/04/29(火) 00:39:02.88ID: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
0814デフォルトの名無しさん2014/04/29(火) 01:49:43.07ID:LXv8yqdQ
ふだんコピペはよくしますが
Excelではセルの内容のコピペをするとき
連続してコピーだけ、あるいは連続だけペーストだけ、というのを可能にしたいです。

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

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

これを実現させるためにはどういうコードを書けばいいですか?
不明な点はエスパーしてください。
0815デフォルトの名無しさん2014/04/29(火) 01:51:28.23ID:LXv8yqdQ
[例]
東京、大阪、千葉と書かれたセルを3連続コピーして
別シートで3つのセルら連続ペーストすれば、千葉、大阪、東京、のようにペーストされる、という感じです。
0816デフォルトの名無しさん2014/04/29(火) 01:58:42.35ID:7Qss/xhP
>>814
そういうのをスタック方式という
わざわざ作らなくても、クリップボードをスタック式に拡張するフリーウェアが既にある
0817デフォルトの名無しさん2014/04/29(火) 09:33:17.01ID: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
0818デフォルトの名無しさん2014/04/29(火) 14:06:35.48ID:LXv8yqdQ
ところで100としたところがオレがプログラミング哲学に反するところなんだが
これを動的配列かなにかを使用して改善することはできないか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

実に不思議なことに
普通のSubプロシージャとかではApplication.ActiveCellしか使えずApplication.ThisCellだとエラー。
逆にユーザ定義関数を書くところではApplication.ThisCellしか使えずApplication.ActiveCellは使えない。
機能的には全く同じものなのに。
不思議ですね。
0835デフォルトの名無しさん2014/04/30(水) 17:45:32.67ID:Iw0O5ndu
range("C"&n&":C"&n+11).select
にしないといけない。
0836デフォルトの名無しさん2014/04/30(水) 18:05:42.98ID: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

(以下、略)
0837デフォルトの名無しさん2014/04/30(水) 18:18:39.04ID:bIvK3JIl
>>836
>>799-802
range("C"&n &":C"&n+11).select
0838デフォルトの名無しさん2014/04/30(水) 18:47:49.29ID:bd35DGVT
>>837
おお、できた。ありがとう。
0839デフォルトの名無しさん2014/05/01(木) 01:54:32.40ID: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
0840デフォルトの名無しさん2014/05/01(木) 02:23:33.09ID:UMPLKQg9
>>839
変数「が」参照するのと変数「を」参照するのは別だから
0841デフォルトの名無しさん2014/05/01(木) 06:29:41.23ID:VQHKFgN+
ユーザ定義関数で他セルの値を計算に使って表示してるとき
他セルの値を変更してもすぐにはそのセルの値が反映されない問題は
どう解決しますか?
0842デフォルトの名無しさん2014/05/01(木) 06:47:21.36ID:9zM4+Fav
>>834
まったく知らずに言うけど、
ActiveCellは、ユーザがマウスでクリックしたなど、
今フォーカスを持っているセル

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

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

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

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

マクロ自体に問題があるわけではなさそうなので別のマシンで使うことにします。
ありがとうございました。
0850デフォルトの名無しさん2014/05/03(土) 05:25:42.80ID:9Cuh0B7r
文字列で指定した関数を呼び出す方法ってありますか?
引数や戻り値はとりあえず置いておいて、シートに書かれた関数があれば実行して、無ければエラーメッセージを出力するような処理を作りたいです。
0851デフォルトの名無しさん2014/05/03(土) 07:59:55.44ID:W3aEO+Ug
他シートをActivateしたらそのシートでActiveCellになるはずのセルのアドレスを
そのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法ですか?
0852デフォルトの名無しさん2014/05/03(土) 08:19:26.49ID: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
0853デフォルトの名無しさん2014/05/04(日) 07:58:46.98ID:PkGldEjn
構造化してる変数が2つあるんですが
1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
0854デフォルトの名無しさん2014/05/04(日) 08:03:57.92ID: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"

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

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

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

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

どうして配列がbyValで直接渡せないのか、理由はよくわからないが、たぶんスタックオーバーフローを防ぐためのMSのおせっかいだと思う
Variantに配列を入れた時は、配列の本体は別の所に作られてスタックはVariant本体の分しか消費しない
だから許容する仕様にしたんじゃないのかな
0863デフォルトの名無しさん2014/05/05(月) 18:06:25.33ID:/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エラーが発生しますが、このエラーを無視して
コードを停止させることなく続行させ続けるにはどうすれば良いのでしょうか?
0864デフォルトの名無しさん2014/05/05(月) 18:15:41.79ID:zTX2z7nm
ON ERROR RESUME NEXT
0865デフォルトの名無しさん2014/05/05(月) 18:23:09.75ID:/BaOb3+l
>>864
ありがとうございます!これは便利ですね。独学でVBAを勉強中ですが知りませんでした。。
0866デフォルトの名無しさん2014/05/05(月) 18:25:54.17ID:hthjFo5y
便利なのは便利なんだろうけどさ、その危険性ってのも判った上で使えよ
0867デフォルトの名無しさん2014/05/05(月) 18:51:57.18ID:zTX2z7nm
SleepとDoEventsの違いは何ですか?

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

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

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

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

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

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

はい、次のかた〜
0881デフォルトの名無しさん2014/05/06(火) 16:34:49.64ID:EF/hc8MQ
>>879
APIで可能
VBAでやる必然性なし
0882デフォルトの名無しさん2014/05/06(火) 16:48:53.58ID:WIbNvSPM
>>881
必然性?
0883デフォルトの名無しさん2014/05/07(水) 01:13:46.53ID:XHO24LnT
シートのCustomPropertyをVBAで設定して
シートを右クリックなどして見れるようにするにはどうすれば良いですか。セルとかコメントに出力する以外の方法でお願いします。
0884デフォルトの名無しさん2014/05/07(水) 01:37:28.97ID:uh4oWvq+
>>883
http://officetanaka.net/excel/vba/tips/tips122.htm
0885デフォルトの名無しさん2014/05/07(水) 01:56:01.55ID:XHO24LnT
>>884
各シートにこういうプロパティ画面を表示するにはどうやるのですか?
0886デフォルトの名無しさん2014/05/07(水) 11:11:46.79ID:aD6Um6cx
みんな なんでも知ってるな・・・
0887デフォルトの名無しさん2014/05/07(水) 13:35:40.93ID:w4bXJfpE
References.AddFromFile()でVBScriptの正規表現ライブラリを参照した後、
RegExpやMatchCollection型の変数を定義するとユーザー定義型未定義の
コンパイルエラーが出てしまうのですがどうしたらよいですか?
0888デフォルトの名無しさん2014/05/07(水) 13:39:29.10ID:uh4oWvq+
>>887
エラーが出る最小限のソース晒して
08898872014/05/07(水) 14:33:27.95ID: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度だけ
実行すれば良いんでしょうけど。
0890デフォルトの名無しさん2014/05/07(水) 14:58:46.92ID:uh4oWvq+
>>889
それはVBAでは基本的に無理
万能の解決策じゃないけど「CreateObject」「実行時バインディング」あたりで調べてみ
08918872014/05/07(水) 15:20:21.05ID:w4bXJfpE
>>890
ありがとうございます。ちょっと調べてみます。
0892デフォルトの名無しさん2014/05/08(木) 16:21:39.25ID: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
0893デフォルトの名無しさん2014/05/08(木) 16:45:09.21ID:UhAEWxzw
まさかと思うが事前に参照設定する方法を知らないわけじゃないよな?
なんかの事情でどうしても実行時に参照したいんだよな?
0894デフォルトの名無しさん2014/05/08(木) 17:19:41.49ID:WIVGkEtc
参照設定ってなんですか?
目的はなんで、それをやるとなにができて、どういうことが便利ですか?
0895デフォルトの名無しさん2014/05/08(木) 18:24:47.72ID:uOW3clqT
使用するパソコンが不定だとか、使う人が不定だとかで、説明する手間を省きたいんだろ
よくある話じゃないか
0896デフォルトの名無しさん2014/05/08(木) 21:10:31.28ID:JZCmTzL0
参照設定で愚ぐれ
0897デフォルトの名無しさん2014/05/10(土) 00:30:41.40ID:DYZqKBH3
シートに入力されたデータをいろいろ演算する必要があるとします。

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

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

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

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

セルの読み書きは変数への代入より時間がかかるので、スピード重視なら変数に入れた方がいいと言われるけど
本気で計算スピードが欲しいならVBとかC#とか使うべきであって、結局は最初に書いたように、
プログラムを作りやすい方を選べばいいと思う
0900デフォルトの名無しさん2014/05/10(土) 01:01:36.00ID:0NkefTVZ
>>898
MergeCellsとMergeAreaでがんばれ
0901デフォルトの名無しさん2014/05/10(土) 11:38:30.40ID:Om1HfajV
>>898
X.MergeArea.Cells(1,1)
09028832014/05/11(日) 03:04:41.66ID:X2XaIOXl
シートのCustomPropertyはエクセル再起動すると値が変化してる事に気付きました。これは自分だけ?
0903デフォルトの名無しさん2014/05/11(日) 13:20:36.77ID: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)
0904デフォルトの名無しさん2014/05/11(日) 13:28:37.64ID:9n+Ded1d
ユーザが作った関数などはマルチコア対応ではありません。
通常マルチコアを有効に使うためにはマルチスレッドでの処理を行います。
残念ながらVBA単独でのマルチスレッド処理はできないと思います。
http://q.hatena.ne.jp/1310989651

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

をまとめて

Dim ret(cnt) As Integer

にしちゃ問題あるの?
0931デフォルトの名無しさん2014/06/06(金) 20:56:58.40ID:2p7Hju+q
>>930
そんなことできない
0932デフォルトの名無しさん2014/06/06(金) 20:59:12.41ID:xrGe04ue
>>931
それはなぜですか?
0933デフォルトの名無しさん2014/06/06(金) 21:07:05.43ID:fJT63IUR
何故と言われてもVBAのお作法みたいなもんだしな
0934デフォルトの名無しさん2014/06/06(金) 21:12:39.28ID:2p7Hju+q
>>932
VBAのルールで、Dimの中で配列のサイズに変数は使えない、と決まっているから
実際にやってみればエラーが出るからすぐ確認できる
0935デフォルトの名無しさん2014/06/06(金) 21:27:08.12ID:xrGe04ue
そうでござったか
0936デフォルトの名無しさん2014/06/07(土) 11:14:14.46ID: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以降しか実行しません

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

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

If Now() < Worksheets("main").Cells(7, 3) + #1:00:00# Then
0940デフォルトの名無しさん2014/06/07(土) 17:41:53.05ID:qI6lrvl+
あ、ごめん。今のなし
日付込みだとおかしくなる
ワークシート上のシリアル値は1900/1/1になってる可能性があるから
0941デフォルトの名無しさん2014/06/07(土) 18:42:33.53ID:FLlpq6Lc
VBAは気づいたらワークシート関数とか一切使ってなかった
じゃVB6で良かったんじゃね?みたいな事になるよね
0942デフォルトの名無しさん2014/06/07(土) 18:49:17.07ID:qI6lrvl+
ちょっとした計算とか確認程度なら、モジュールすら作らずにイミディエイトウィンドウでやっちゃう
コンパイルどころかソースファイルすら作る必要がないという手軽さは他の処理系では真似できない
0943デフォルトの名無しさん2014/06/07(土) 19:25:35.22ID:SxbAzKvi
するとこうなりますね
http://cpplover.blogspot.jp/2014/05/blog-post_29.html
0944デフォルトの名無しさん2014/06/10(火) 02:49:48.07ID: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を変数として認識させる方法はないでしょうか?
同じフォルダ中のファイルをすべて開く方法ならあるようですが、それだと意味が
ないのです。わかる方がいましたらよろしくお願いいたします。
0945デフォルトの名無しさん2014/06/10(火) 03:33:00.72ID: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
0946デフォルトの名無しさん2014/06/10(火) 04:40:54.93ID: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で絞り込むだけの話
0947デフォルトの名無しさん2014/06/10(火) 10:36:42.20ID:zXPv5kx2
>>945
ありがとうございます
Iを"と&amp;で挟むことは私も試したんですが、エクセルは両方で挟むんですね
これで行けそうです

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

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

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

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

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

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

わざわざVBA作るほど沢山あるわけじゃないから、手で治すことにするよ。
アドバイスごち
0958デフォルトの名無しさん2014/06/28(土) 22:46:48.16ID:SUZfbKz3
規定回数をFor文で回したい時って
EXCELは0行0列がないから1スタートにしてるんだけど
For文は変数を0と1のどっちでスタートさせてる?
0959デフォルトの名無しさん2014/06/28(土) 23:05:08.46ID:++0JMPiR
ケースバイケース
FORループ内でアクセスするオブジェクトに依存するんじゃね
オブジェクトに依存しない時は 1スタートの方が分かりやすいと思うが
0960デフォルトの名無しさん2014/06/28(土) 23:08:57.04ID:SUZfbKz3
>>959
さんくす
セルを参照したり、書きこむ場合は1スタートの方が便利だよぁ
C言語では0スタートが当たり前だから、FORの性質間違え易いんだよね
0961デフォルトの名無しさん2014/06/28(土) 23:19:53.58ID:vnVg5isx
Forの開始値なんて、言語に関係なく0でも1でも100でも-1でもなんでもいい
ケースバイケースで処理内容に合わせて適切な値を選ぶだけ
Forの性質とか意味不明
0962デフォルトの名無しさん2014/06/28(土) 23:19:55.85ID:++0JMPiR
C言語だろうと VBAだろうと アクセスするオブジェクトに依存する事は変わらないと思うが

0スタートになれてるなら
オブジェクトに依存しない時も 0スタートの方が混乱しないと思うぞ
0963デフォルトの名無しさん2014/06/28(土) 23:26:55.43ID:vnVg5isx
セル操作の時はFor Each
0964デフォルトの名無しさん2014/06/28(土) 23:29:21.75ID:xYrnaOxY
ケースバイケースとかやめて統一してくれよ
0965デフォルトの名無しさん2014/06/29(日) 00:10:17.76ID:r3ERVTwD
>>964
じゃあお前はお前のルールで統一しとけ
0966デフォルトの名無しさん2014/06/29(日) 00:14:35.94ID:obj95/HS
Forの範囲なんてどうやって統一すんだよ
0967デフォルトの名無しさん2014/06/29(日) 00:18:23.91ID:CZI2SpAG
慣れていない言語だと、ループを抜けた後、条件に対して変数がどう変わるか不安で仕方ない
0968デフォルトの名無しさん2014/06/29(日) 00:24:34.10ID:c8G3vdag
0スタートに統一したいならこうするwwwwww
1スタートに統一するなら他言語を wwwwww

'0スタート
'(A1:A10まてイミディエイトへ表示)
For I = 0 To 9
Debug.Print Cells(I + 1, "A")
Next
0969デフォルトの名無しさん2014/06/29(日) 00:36:45.71ID:7WQEgw+o
+1の計算コストwwww
0970デフォルトの名無しさん2014/06/29(日) 00:46:16.93ID:c8G3vdag
統一する為なら コストや 分かりやすさ なんて
関係ないねwwwww
0971デフォルトの名無しさん2014/06/29(日) 01:39:14.46ID:obj95/HS
アホか
こんなのはどうやって統一すんだよ

For i = -2.73 To 6.58 Step 0.52

いちいち0スタート増分1に書き直してたらコーディングの手間も増えるしバグの元だろ
0972デフォルトの名無しさん2014/06/29(日) 01:54:33.08ID:ojuPNtQE
>>971
何の目的でそんなバカコード書いてんだよw
0973デフォルトの名無しさん2014/06/29(日) 02:10:25.03ID:c8G3vdag
>>971
遊んでるならいいけどwwwww

マジレスならアホ

ID:xYrnaOxY のはただの煽りだから
0974デフォルトの名無しさん2014/06/29(日) 05:01:33.62ID:r3ERVTwD
>>971
増分は問題にしてないからな
開始値を1しか認めない教、または、0しか認めない教の人がいるだけ
ループ前にオフセット計算してループ内でオフセット足せばできる
0975デフォルトの名無しさん2014/06/29(日) 07:06:48.40ID:7WQEgw+o
>>971
それ本当に0.52ずつ増える?w
0976デフォルトの名無しさん2014/06/29(日) 07:44:51.13ID:r3ERVTwD
>>975
iの型による
0977デフォルトの名無しさん2014/06/29(日) 10:40:18.41ID:Pc4scBT7
荒れてるな
0978デフォルトの名無しさん2014/06/29(日) 10:48:45.73ID:37p3Fs6h
初期値とカウントアップする値が
特殊な値の場合は外出しするか
ループの中の計算式に入れるな、
自分なら。
0979デフォルトの名無しさん2014/06/29(日) 11:09:04.04ID:37p3Fs6h
Cの場合はfor(i=0;i<nArray;i++)で小なり
条件で書くと無駄な計算式が入って
なくて読みやすい。

Vbaの場合は馴染まないな。
0980デフォルトの名無しさん2014/06/29(日) 12:22:28.79ID:d4tnsDO5
>>958
> 規定回数をFor文で回したい時って

VBA は、For I = ... To 10 で 10 まで回るから、1 スタートの方がいいと思う。
10回回すのに For I = 0 To 9 だと、ちょっと分かりにくいかと。
0981デフォルトの名無しさん2014/06/29(日) 14:25:54.82ID:nMuEys5f
ゼロスタートじゃないと余りの計算が厄介なんだな
0982デフォルトの名無しさん2014/06/29(日) 15:16:49.14ID:U5JNCkXQ
Excelに限ってはセルの開始が1からだからなあ
配列もArray(10)で宣言してインデックス0は使わないとかしちゃう

VB.NETのβ版でC系と同じにしようとして
Array(10)で宣言したら(0)〜(9)の要素10になる仕様にしたら
世界中のVB6プログラマからクレームがきて
Array(10)で0から10の要素11個という謎仕様継続になったそうな
0983デフォルトの名無しさん2014/06/29(日) 16:40:26.72ID:tO69Jiz2
最近 Google Apps の Spreadsheet の Google Apps Script を勉強し始めたのですが
こちらも 1, 1 から開始ですよ
0984デフォルトの名無しさん2014/06/29(日) 21:25:17.92ID:ojuPNtQE
ループカウンタはあくまで単なるカウンタ。ループの回数が分かればいい。
それ以上の意味を持たせようとするのは、変数を使いまわすようなもんだよ。
あまりいい習慣じゃないね。
0985デフォルトの名無しさん2014/06/29(日) 21:35:24.84ID:brs7RvOR
気軽に聞いたんだけど、荒らしてしまったようで申し訳ない
答えてくれた人ありがとう
EXCEL VBAきちんと勉強せずにC言語の知識を引き出しつつ書いてるから、ここの人の宣言方法が気になったんだけど、十人十色みたいだな
きちんと本読んで学習します
0986デフォルトの名無しさん2014/06/29(日) 21:53:09.64ID:r3ERVTwD
>>984
ループカウンタを使わないループについてどう思ってる?
Forで使う変数はループカウンタでしか使えないと思ってる?
0987デフォルトの名無しさん2014/06/29(日) 21:54:16.59ID:r3ERVTwD
>>985
大丈夫だ。どうせみんな、単なる暇つぶしだから
0988デフォルトの名無しさん2014/06/29(日) 22:00:41.18ID:ojuPNtQE
>>986
For Each の事?カウンタ使わないですむなら、その方がいいと思ってるけど?
For文で単なるカウンタ以外の用途に使うのは、あまりいい習慣じゃない。
というのが俺のスタンス。
0989デフォルトの名無しさん2014/06/29(日) 22:26:05.04ID:TEKyyc0a
0990デフォルトの名無しさん2014/06/29(日) 23:34:53.93ID:/f6OgjXt
for i = 1 to 10 を抜けた後、iは11になってるんだっけ
0991デフォルトの名無しさん2014/06/30(月) 00:09:32.16ID:kvKysRCz
>>990
なる
勘違いして酷い目にあった
0992デフォルトの名無しさん2014/06/30(月) 00:46:04.55ID:7oaDBF3M
やっぱそうだよね、俺も酷い目あった
0993デフォルトの名無しさん2014/06/30(月) 00:46:21.14ID:GUDWX1C/
うめ
0994デフォルトの名無しさん2014/06/30(月) 00:58:56.95ID:20WNNlQl
俺は逆にそれで
ループ終了で抜けたか Exit For で抜けたか判断してる
0995デフォルトの名無しさん2014/06/30(月) 01:07:12.44ID:iijp9ipF
>>990
ここ2chではレス番号はfor文を1から1000で回してるため
1000番目の書き込みの後、自動的に1001番のレスでレス終了のメッセージを表示してる。
0996デフォルトの名無しさん2014/06/30(月) 01:51:06.95ID:DNhhFBBa
>>994
Exit For の直前で i = 11 ってやってしまう可能性があるのでおすすめできない
ループに終了条件がある時はWhileとか使った方が安全
0997デフォルトの名無しさん2014/06/30(月) 01:54:50.86ID:BzHZeElB
sx
0998デフォルトの名無しさん2014/06/30(月) 02:07:33.39ID:f17tdAtr
>>996
そんなこと言い出したらWhileの直前で終了条件いじることだって有り得るじゃん。

For Next でExit Forで抜け出すか正常にループが終了したかを
カウンタの値で判別するという処理を書いてるのに
Exit For の前でカウンタの値を変更するような馬鹿げたコードを書く奴は
そもそもプログラミングに向いてない。
0999デフォルトの名無しさん2014/06/30(月) 02:17:18.34ID:20WNNlQl
>>996
その可能性はWhileでも同じ
1000デフォルトの名無しさん2014/06/30(月) 02:25:18.53ID:zp+CalxP
ループ終了後のカウンタ値はドキュメントに明示されてない(保証されてない)から、いつ仕様が変わるかわからない
処理系によっても異なるので、思い込みバグの元になる

試行錯誤で裏技テクニックを発見するのはいいけど、そういうのは大々的に使うべきじゃない
この危険性が理解できない人は、それこそプログラミングに向いてない
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。