Excel VBA質問スレ Pa ..
[2ch|▼Menu]
2:デフォルトの名無しさん
08/12/04 15:43:49
過去スレ
01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04 スレリンク(tech板)
05 スレリンク(tech板)
06 スレリンク(tech板)
07 スレリンク(tech板)
08 スレリンク(tech板)


3:デフォルトの名無しさん
08/12/04 18:29:10
>>1

前スレ1000立てもせずに埋めやがって
氏ねばいいのに

4:デフォルトの名無しさん
08/12/04 20:11:57
EXCEL VBAで実現可能で
おまいらが一番すごいと思うものって何?
参考までに教えてほしい

5:デフォルトの名無しさん
08/12/04 21:03:29
Shift =シフト
alt =アルト
Delete =デリート
VBA =ブバ

6:デフォルトの名無しさん
08/12/04 21:19:26
アルトw

7:デフォルトの名無しさん
08/12/04 21:35:09
無理やりカタカナ表記するなら、オゥトが近いけどな。

8:デフォルトの名無しさん
08/12/04 21:51:50
近くないし、半可通のスレ違い得意語りはどうでもいいから

9:デフォルトの名無しさん
08/12/04 23:25:22
オルトとか言うオチじゃないよね?

10:デフォルトの名無しさん
08/12/05 10:30:09
スレ違いでごめん・・・。
excel VBAからSAS参照できるんだけど、どこまで使えるのかがリファレンス見てもさっぱり・・・。
他言語とのマッシュアップでお勧めの本ってありますか?
もしくは他スレへ誘導してくれるとありがたいです。

11:デフォルトの名無しさん
08/12/05 10:45:00
WebBrowserの使い方 教えてください

12:デフォルトの名無しさん
08/12/05 11:45:16
>>10
そのSASとやらのスレに行けよ

13:デフォルトの名無しさん
08/12/05 23:14:09
>>11
IEのアイコンをダボークリッ

14:デフォルトの名無しさん
08/12/06 01:23:02
SendKeys "あア"
が「ああ」になるけど、半角カタカナは送れんの?

15:デフォルトの名無しさん
08/12/06 02:05:44
試してみた。ちゃんとVBEのカーソル位置に「あア」と入力された。
Sub a()
  SendKeys "あア"
End Sub

16:デフォルトの名無しさん
08/12/06 15:15:51
excel2007でダメだった
あ「あ」←未確定状態


17:デフォルトの名無しさん
08/12/06 16:18:23
2003でも2007でも問題ないぞ。
うちがATOKだからか?

18:デフォルトの名無しさん
08/12/08 11:59:35
Excel2002 + Microsoft IME Standard 2002 ver.8.1、VBE上で>>15を実行

IME     結果
OFF    :あア
ひらがな :あ「あ」
全角カナ :あ「ア」
全角英数:あ
半角カナ :あ「ア」
半角英数:あ
※「」内は未確定状態

19:デフォルトの名無しさん
08/12/08 15:28:30
XP SP3 + Excel 2007 + Microsoft Office IME 2007

VBE上では あ だけ
IME OFF→ひらがな に変化

メモ帳に
あ「あ」

IME English
?? に

IMEに依存する模様

20:デフォルトの名無しさん
08/12/08 22:25:49
VBA初心者になんかお題をください。

21:デフォルトの名無しさん
08/12/08 23:06:58
>>20
VBAで数独。人に解かせる(GUI)のでもプログラムに解かせるのでもよし。
問題生成もできたらなおよし。

22:デフォルトの名無しさん
08/12/08 23:14:13
100マス計算生成マクロ。
経過秒数、正答率表示機能付き。

23:デフォルトの名無しさん
08/12/09 00:59:28
アドイン化が猿でもわかるサイトor本ってある?

24:デフォルトの名無しさん
08/12/09 11:00:26
VBAを起動し「コードの表示」をクリック(フォームをWクリック)すると「メモリが不足しています。」と表示され、
コードの書き込みが一切できません。
新規で開いたエクセルファイルで、まっさらな状態でも
「メモリが不足しています。」と表示されます。
対処法はありますでしょうか?

Mac OS 9.2.2 Microsoft Office 2001 バージョン9.0(2615)です。あと何か必要な情報はありますか?


25:デフォルトの名無しさん
08/12/09 11:58:26
>>24
URLリンク(support.apple.com)

26:24
08/12/09 12:07:46
>>25
べらぼうに割り当てを増やしてもだめなんだよ。

27:デフォルトの名無しさん
08/12/09 12:55:43
>>26
オマエのいってる「べらぼう」がなんだか知らないけど、
メモリがたりないんだろ?

28:24
08/12/09 14:43:36
>>27
そういう基本的なことじゃないらしいというところまではわかっているんですけどね。
オマエ呼ばわりするオタクがいるところにきたオレがバカだった。

29:デフォルトの名無しさん
08/12/09 14:51:50
>>28
わかってねーじゃん

30:デフォルトの名無しさん
08/12/09 14:53:43
要するにVBEが使い物にならないんだな
再インスコくらいは試してるよな?
2chで質問する前にこんな基本的なこともしてないならマジでバカだな

31:デフォルトの名無しさん
08/12/09 22:21:16
>>24
こちらへどうぞ
URLリンク(pc11.2ch.net)

32:デフォルトの名無しさん
08/12/09 22:48:23
FOMの本で勉強中なんですが
配列について教えてください。

Sub 配列変数()
Dim Nanakusa(6) As String
dim As Integer
Nanakusa(0) = "せり"
Nanakusa(1) = "なずな"
Nanakusa(2) = "ごぎょう"
Nanakusa(3) = "はこべ"
Nanakusa(4) = "ほとけのざ"
Nanakusa(5) = "すずな"
Nanakusa(6) = "すずしろ"
For i = 0 To 6
Cells(8 + i, 3).Value = Nanakusa(i)
Next i
End Sub

このサンプルコードなんですが、下から3行目の
Cells(8 + i, 3).Value = Nanakusa(i) この部分は
セルC8から下方向にインデックスiの配列変数Nanakusaの値を入力。 と書いてあるのですが

(8 + i, 3) ←ここがよくわかりません。

CellsだとR1C1?形式みたいので列も行も数字で指定するってのはわかったのですが
どこで"下方向"ってのを指定してるのか
また、( 8,3 + i) ←列と行を指定してから変数iを入れる感じの、これのほうがしっくり来る気がするのですが
どういうことなんでしょうか?

33:デフォルトの名無しさん
08/12/09 23:11:07
(row,col)ってことです。

34:デフォルトの名無しさん
08/12/10 01:47:18
便乗質問。>>32のサンプルでわからない部分があるのですが
dim As Integer
これはどういう意味ですか?

35:デフォルトの名無しさん
08/12/10 01:48:57
電卓のテンキーと電話のテンキーみたいなもの

36:デフォルトの名無しさん
08/12/10 07:01:07
変数の宣言が判らないレベル?

37:デフォルトの名無しさん
08/12/10 08:18:23
すみません。

A1セルに「業務1」という値がある場合、A2セルに「担当1」、
A1セルに「業務2」という値がある場合、A2セルに「担当2」
B1セルに「業務1」という値がある場合、B2セルに「担当1」...
というようなものを、現在If関数でやっています。
追加追加で来ていたので、ネストがかなり深いです。
だんだん条件が増えてきたので、何とかマクロで作成できないものかと考えています。

メンテを楽にする条件で、変数と代入で可能でしょうか。
VBAが初めてなので、ちょこちょこ調べながらなのですが、
方向性がつかめなくて・・・

38:デフォルトの名無しさん
08/12/10 10:44:31
テンプレ読めないやつ多いな・・・

>>37
1行目に業務を入れて2行目にその担当を出したい
今はIFでやってるから業務が増えてくると大変なのでどうにかしたい
ってところか?
LOOKUPとかじゃだめなのか?

39:デフォルトの名無しさん
08/12/10 11:48:48
デフォルトの型をバリアントから変更する方法でもあるのかと思ったけど試したらエラーになったから
Dim i As Integerの書き間違い?

コピペすれば間違いようがないと思うんだけど、もしかしてパソコン使わずに本だけで勉強してんのかな。

40:デフォルトの名無しさん
08/12/10 17:03:11
>>37
VBAやったことない人なら、lookup なり作業列なり使って、
考え方から整理し直した方がどう考えてもラク
今の考え方のままだと、VBAでも if でネストしまくったわかりにくいコードになりそう
改行とインデントがある分読みやすいだけみたいな

41:デフォルトの名無しさん
08/12/10 18:46:07
すみません・・・
VLOOKUPであっさり出来ました・・・orz

VBAもちょこちょこ勉強していきます。
スレ汚しすみませんでした

42:デフォルトの名無しさん
08/12/10 19:40:57
WindowsXP&Excel2003で質問です。
印刷された時に、セルに入力されているデータが長すぎて、
全文表示されなかったりしますが、
そういう状態かどうか調べるにはどうしたらいいでしょうか?

43:デフォルトの名無しさん
08/12/10 19:48:51
>>42
文字数や文字バイト数(unicodeだと全部2バイトだから変換しる。)で情報量を調べておいて、、
予め余裕持って設計しましょう。
80バイト毎にheightをX倍してやるとかね。

印刷すると崩れるのは仕方の無い事。
崩したくないならば、excelじゃなくて優秀なドローツールを使うか、ラスタライズしてから印刷するとか。


44:デフォルトの名無しさん
08/12/10 20:48:45
左から6文字が空白ならという条件式は次のでいいですか?
xp 2003 空白文字も含めて全て全角にしています。

if left$(moziretu,6)=space(6) then


45:44
08/12/10 20:50:50
効いていないので効きました。
よろしく


46:デフォルトの名無しさん
08/12/10 21:09:53
if left$(moziretu,6)="      " then

47:デフォルトの名無しさん
08/12/10 21:58:41
>>44
mid関数

48:デフォルトの名無しさん
08/12/10 23:47:47
>>47
左から6文字「目」じゃない

49:デフォルトの名無しさん
08/12/11 10:42:48
>>
それは半角の空白6文字かどうかの判定式。
全角6文字の空白かどうかなら
If Left$(moziretu,6)=String$(6," ") then
混在だとちょっと面倒かな?

50:デフォルトの名無しさん
08/12/11 11:48:18
>>49
全角半角考慮してこんなのはどうかな?
LTrim$(Left$(moziretu, 6)) = ""

51:デフォルトの名無しさん
08/12/11 13:07:48
>>50
なるほどね。
それが一番いいだろうな。

52:デフォルトの名無しさん
08/12/11 16:54:36
StrComp(Left$(moziretu,6),Space(6),vbTextCompare)

53:デフォルトの名無しさん
08/12/11 17:24:22
空白文字も含めて全て全角にしています、って書いてあるし、
数も6個で固定なら>>46で充分でしょ
わざわざ余分な関数使う意味がわからない

54:50
08/12/11 18:16:07
>>53
>>45を読めばその一言が信用できないことくらい分かるだろ?

49だけ読んでレスした漏れが言えた事じゃないがw

55:デフォルトの名無しさん
08/12/11 20:34:08
>>43
ありがとうございました。
バイト数を数える事で対応してみます。

56:デフォルトの名無しさん
08/12/13 03:22:22
VBAフォームに、VBのFlexGridのようなマス目の入ったものを
表示させてEXCELのシートとやりとりしたいのだが、
そういったコントロールってないの?
今使ってるのがEXCEL2000なんだが。。。

57:デフォルトの名無しさん
08/12/13 03:48:02
アホ発見

58:デフォルトの名無しさん
08/12/13 14:45:20
会社でやってる作業を自動化したくてVBAに興味を持ったんですが、よい参考資料が見つかりません。

VBAのリファレンス本でお勧めを教えて頂ければ助かります。

環境はWin2kでExcel 2003です。Cとか弄ったことがあるのでまるっきり初心者ではないです。

59:デフォルトの名無しさん
08/12/13 14:56:02
丸っきりの初心者ではないと言い張るのなら、参考資料など見つからなくても何とかするもんだ。

60:デフォルトの名無しさん
08/12/13 16:22:48
>>56
owc

>>58
msdnのヘルプ

61:デフォルトの名無しさん
08/12/13 18:39:41
本といわれてヘルプを紹介するアホはどうにかならんかね。


62:デフォルトの名無しさん
08/12/13 18:43:12
どうにもならんよ

63:デフォルトの名無しさん
08/12/13 19:36:14
大きな本屋に行って参考書探すくらいの努力したら?

64:デフォルトの名無しさん
08/12/13 20:57:44
経験者なら本なんていらんだろ。
VBAくらい中学生でも使え紆余w

65:デフォルトの名無しさん
08/12/13 22:32:27
折れは、このスレだったか昨年知った次の本を薦める。
「技術評論社 Excel VBA ポケットレファレンス」
成りは小さいが、他のどの本よりも役に立った。
今年、確か、2007対応の改訂版が出たと思うが2003等も使えるように整理してあるはず。


66:デフォルトの名無しさん
08/12/13 22:55:26
ヘルプを見るのは常識として
本なら俺も↑のポケットリファレンスだな。
あとはできる大事典VBAもいい
勉強中なら本のほうがやりやすい所あるし。



67:58
08/12/14 15:30:22
コメントくださった方、ありがとうございました。

>65,66で紹介して頂いたポケットリファレンスを購入してきました。
ちょっと手に取って調べられる本が欲しかったので、まさにぴったりです。

68:デフォルトの名無しさん
08/12/14 16:42:59
>ちょっと手に取って調べられる本が欲しかったので、まさにぴったりです。
だったらそれを先に書いておけよ。

69:デフォルトの名無しさん
08/12/14 17:19:15
それくらい読み取れよアホ

70:デフォルトの名無しさん
08/12/15 02:04:11
まあ解決したみたいだからいいじゃないか。

71:デフォルトの名無しさん
08/12/15 16:37:15
2007は関数の追加や仕様の変更が色々あったおかげで説明が増えて少し読みにくくなったので、
もし2003で使うならブックオフあたりで古いやつを探すといいかも。

72:デフォルトの名無しさん
08/12/15 23:15:34
スレチでしょうか…?初心者です。質問させて下さい
WindowsXP、Excel2000です

マクロでゲーム作りに挑戦し、遊べる段階にまで出来上がったのですが…
なぜだか遊んでいると、高確率で突然「画面更新」が止まってしまいます。
処理は続いているので、音も鳴りますし、Escボタンでコードの実行を中断すると、画面更新が再開され内容が反映されます。
その時「継続」を選ぶとゲームを続けられるのですが、しばらくするとまた止まってしまいます。
ループ中にScreenupdating = Trueを入れてみましたが、効果はありませんでした。

何が原因なのでしょうか?思い当たる節があれば教えて下さい。
因みに落ちゲーで、セルドット方式です。Sleep関数を多用しています。

長文失礼しました…

73:デフォルトの名無しさん
08/12/16 00:01:40
仕様です。
おとなしくFlashの勉強するのが吉。

74:72
08/12/16 04:33:53
>>73
レスありがとうございます。
仕様ですか…Excelの描写速度が遅いことは知っています。
しかし、ゲームプログラマーの方々もいらっしゃいますし、自分に否があるように思えてなりません。

コードの書き方に問題がある、ということは考えられませんか?コードは現在700行程です。
自信はありませんが、Sleepが問題な気がします。どうでしょうか。

75:デフォルトの名無しさん
08/12/16 04:41:10
「否」でなく「非」でした

76:デフォルトの名無しさん
08/12/16 06:08:43
だったらコードを晒したら?
それができないなら自分で勝手に調べて答えを出せばいいよ。

77:デフォルトの名無しさん
08/12/16 10:00:26
データ型について質問です。
エクセルのセルに勤務時間が入っており、これをvbaで計算しているのですが
時間の時も日付型(DATE)の方が良いのでしょうか?
それともSingleやDoubleでしょうか?

VBAの勉強も兼ねてやってますので、関数でやれという回答はご容赦下さい・・

78:デフォルトの名無しさん
08/12/16 12:24:26
>>76
やっぱり、コード見ないとどうしようもないですよね…
お騒がせしました

79:デフォルトの名無しさん
08/12/16 13:09:50
そりゃぁ、Sleepが問題だなんて認識している香具師とまともに会話が成立するとは思えないもんねぇ。

80:デフォルトの名無しさん
08/12/16 13:10:45
>>77
勉強を兼ねているんだろ。全部やれ。

81:デフォルトの名無しさん
08/12/16 13:15:49
>>80
試してみてどちらでもできるということは確認済みなんです
でも一般的に、どちらがベターなのかなと思いまして


82:デフォルトの名無しさん
08/12/16 13:27:29
一般的には、シート関数だな。

83:デフォルトの名無しさん
08/12/16 15:03:10
>>79
Sleep関数は問題無いんですね?ありがとうございます!安心しました
Sleepが使えないとなると凄く面倒になるので…

以前に原因を調べていたところ、Sleep関数の欠点(?)を綴ったページを見つけ、
その内容を見て勝手にSleepが原因だと解釈してしまったみたいです。
自己解決出来るよう、もう少し頑張ってみます

84:デフォルトの名無しさん
08/12/16 15:42:22
エクセルでVBAを使ってじゃんけんゲームを作れと言われたのですがわかりません
教えてください


85:デフォルトの名無しさん
08/12/16 15:50:10
宿題丸投げはご遠慮ください。
VBAでなくてもできることの質問は、VBスレ辺りでどうぞ。

86:デフォルトの名無しさん
08/12/16 21:46:59
VBスレでも宿題はお断りだw

87:デフォルトの名無しさん
08/12/16 23:12:04
V=チョキ
B=グー
A=パー

としてじゃんけんを楽しんでください。

88:デフォルトの名無しさん
08/12/17 07:58:32
意地悪なやつらだな。
逆に考えろよ。VBAなんて宿題かゲームくらいにしか使わないだろ。
おまえらのご自慢のテクニックを披露できるチャンスだぞ。

89:デフォルトの名無しさん
08/12/17 09:42:52
と学生が申しております
仕事で使うわアホ


90:デフォルトの名無しさん
08/12/17 11:06:52
>>89
VBAがまともに使えない上に仕事したことないやつが若気の至りってやつで書き込んだんだろう
あまり責めてやるなよw

91:デフォルトの名無しさん
08/12/17 12:55:10
>>89>>90
どんなことに使ってるの?

92:デフォルトの名無しさん
08/12/17 13:49:36
ルーチンワークは大体そう
他は資料をデータベースっぽく正規化するために使うことも

・・まぁ、大企業ならこんなことしなくても既にシステムは完成されてるんだけどね

93:デフォルトの名無しさん
08/12/17 13:51:22
SAPのBWなんかはExcelマクロ

94:デフォルトの名無しさん
08/12/17 13:57:12
オフコンからデータ(CSVとか)受け取って
帳票(見積書とか)の形に整えて印刷とか

95:デフォルトの名無しさん
08/12/17 18:51:26
WindowsXP、Excel2002ユーザの質問です。

現在VBAマクロ内で、OSのXP/Vistaの違いを問わず、 インストールされているFirefox 3.0.xの
実行ファイルのフルパスを取得しようとしています。Firefox3が

・標準のフォルダ以外にインストールしている可能性がある
・HTML、HTTP等に関連付けられている
・デフォルトブラウザに指定されている

という状態で使われているとき、マクロ上で何をすればスマートにフルパスが得られるでしょうか?
検索すると、既存ファイルを利用する方法、レジストリの関連付けを参照する方法がありますが、
他の方法は無いでしょうか?

参考になる情報をご存知の方、教えてください。

96:デフォルトの名無しさん
08/12/17 19:27:43
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox. exe]


97:デフォルトの名無しさん
08/12/18 01:52:45
問屋でデータ処理に未知のオフコン使ってて、送られてくる売り上げデータのフォーマットが変態的なんで
VBAで整形&正規化してる。なんか>>94とよく似た境遇だな。おまけに受け渡しはいまだにフロッピーディスク。
社内でデータベース処理してるマシンも松下製の見たことない機種だったなあ。
こっちはなんとPC-9821が専用ケーブルでつながってて、N88-BASICで書かれた端末ソフトが走ってる。

中小企業でコンピューターの知識がないと、メーカーの営業の言うがままにシステム構築して
記憶媒体から何から何まで汎用性ゼロのシステムで囲い込まれてにっちもさっちもいかないことが多い希ガス。

98:デフォルトの名無しさん
08/12/18 10:56:24
何年前に作ったシステムだよ?

99:デフォルトの名無しさん
08/12/18 11:40:21
wikiによるとPC-9821が入ったのは早くても15年位前らしいな

パソコンで動くエミュレーターがあるにもかかわらず
いまだにバカ端が業務で現役ってところもあるしそんなに珍しくもないんじゃね?

まぁスレ違いだしこの辺で流れ斬ろうか・・・

100:デフォルトの名無しさん
08/12/18 13:42:45
ダム端って言うんだよ

101:sage
08/12/18 15:09:13
いまユーザーフォームを利用してモグラたたきを作っているのですが
じかんをカウントダウンさせるプログラムとモグラの動きのプログラムが
うまく作用せず、モグラの動きのプログラムが終了すると
再びカウントダウンするようになってしまいます。両方とも独立して動くように
したいのですがよい方法はありませんか。

102:sage
08/12/18 15:11:29
ソースです

スタートボタンを押すと時間のカウントダウンを開始
Private Sub CommandButton1_Click()
starttime1 = 2
starttime2 = 0
startflag = 1 'ゲーム開始用フラグ

Do While starttime1 >= 0

keika = Timer + 1
Do While keika > Timer
Loop
starttime2 = starttime2 - 1
If starttime2 < 0 Then
starttime2 = 59
starttime1 = starttime1 - 1
End If
If starttime1 < 0 Then
MsgBox "TIME UP!" '時間が過ぎたら
Exit Do
End If
Label4 = starttime1 & ":" & starttime2 'ラベルに時間のカウントダウンを表示
DoEvents
Loop
End Sub

103:sage
08/12/18 15:18:27
ソースの続き

Private Sub back1_Click() back1はイメージオブジェクトです
If startflag = 1 Then
Call moguratataki
End If
End Sub
コマンドボタンを押したら時間のカウントダウンとゲームの開始したいと
思っていますがそれもまだ分からないので調べ中です。
call命令で、もぐらたたきゲームが始まるような感じで作りたいと思っています。


104:sage
08/12/18 15:22:58
ソースの続き2

Sub moguratataki()

Randomize
kyarass = 15
stsuu = Int((3 * Rnd) + 1)
hozon(0) = stsuu
hozon(1) = stsuu
a = 0
Do While stsuu > 0
stkyara = Int((kyarass * Rnd) + 1) - 1
If krflag(stkyara) <> 1 Then
trkyara(a) = stkyara
krflag(stkyara) = 1
stsuu = stsuu - 1
a = a + 1

End If
Loop




105:sage
08/12/18 15:25:33
ソースの続き3
b = 0
Do While hozon(0) > 0
stbasyo = Int((25 * Rnd) + 1)
If anaflag(stbasyo - 1) <> 1 Then
If stbasyo < 16 Then
anaflag(stbasyo - 1) = 1
yokoti = (stbasyo Mod 5) - 1
If stbasyo = 5 Or stbasyo = 10 Or stbasyo = 15 Then
yokoti = 4
End If
If stbasyo = 15 Then
stbasyo = 14
End If
tateti = Int(stbasyo / 5)
anax(b) = xti1(yokoti)
anay(b) = yti1(tateti)
b = b + 1
hozon(0) = hozon(0) - 1


106:sage
08/12/18 15:26:25
ソースの続き4
Else
anaflag(stbasyo - 1) = 1
yokoti = (stbasyo Mod 5) - 1
If stbasyo = 20 Or stbasyo = 25 Then
yokoti = 4
End If
If stbasyo = 25 Then
stbasyo = 24
End If
tateti = Int((stbasyo - 15) / 5)
anax(b) = xti2(yokoti)
anay(b) = yti2(tateti)
b = b + 1
hozon(0) = hozon(0) - 1
End If
End If
Loop

107:sage
08/12/18 15:27:54
ソースの続き5
For i = 0 To hozon(1) Step 1
mogura(trkyara(i)).Move anax(i), anay(i)
mogura(trkyara(i)).Visible = True
Next i
For i = 30 To 0 Step -3
For j = 0 To hozon(1) Step 1
mogura(trkyara(j)).Move anax(j), anay(j) + i
Next j
DoEvents
ts = Timer + 0.1
Do Until ts < Timer
Loop
Next i
DoEvents
ts = Timer + 0.1
Do Until ts < Timer
Loop
For i = 0 To 30 Step 3
For j = 0 To hozon(1) Step 1
mogura(trkyara(j)).Move anax(j), anay(j) + i
Next j
DoEvents
ts = Timer + 0.1
Do Until ts < Timer
Loop
Next i

For i = 0 To hozon(1) Step 1
mogura(trkyara(i)).Visible = False
Next i
end sub

108:sage
08/12/18 15:30:53
わかりにくく読みにくいコードだと思いますが(すいません)よい方法あれば
教えてください。

109:デフォルトの名無しさん
08/12/18 15:31:07
Application.Ontimeでゴリゴリやるか、時間計測用のActiveX EXEを作ってイベントドリブンにしろ。
っつってもわかんねーかな。

110:デフォルトの名無しさん
08/12/18 15:46:55
<<109 さん
おはやい回答ありがとうございます。
Application.Ontimeを調べてみました。なんとなくできそうな気が
しそうですのでこれでやってみようと思います。ありがとうございました!

111:デフォルトの名無しさん
08/12/18 20:25:38
セルのある列全体ににプルダウンの選択式で○、×を選ぶとします。

それをif判定で、試してみたところうまく結果がでませんでした。
プルダウンの選択式だと、"○"として扱われないのでしょうか?

112:デフォルトの名無しさん
08/12/18 20:46:33
>>111
何のプロパティをチェックしてるの?

113:デフォルトの名無しさん
08/12/18 20:48:17
>>112
cellsでとってvalueを参照しております。
イミディエイトで中身みたら、ちゃんと×や○になってたのに・・・

114:デフォルトの名無しさん
08/12/18 21:40:37
>>113
実際のif文は?

115:デフォルトの名無しさん
08/12/18 21:41:19
>>113
そもそも、プルダウンじゃなくすれば判定できるの?

116:デフォルトの名無しさん
08/12/18 21:48:14
>>114
do until なんとか =""
with ほにゃらら
if .cells(x, y).value = "○" then
処理
end if
loop

.valueにはいってる値を確認したところ、×とかちゃんとはいってました

セル全体にプルダウンの選択がそれぞれ入ってるからループ文では聞かないのかな



117:デフォルトの名無しさん
08/12/18 22:26:25
sheet1の2-24行、D列に○×のプルダウンがはいっています。
これでやるとエラーがでますifの行に

x = 1
i = 2
y = 4
Do Until Cells(i, y).Value = ""

If Cells(i, y).Value = "○" Then
Sheets(2).colums(x).Delete

x = x + 1
i = i + 1

End If
Loop

118:デフォルトの名無しさん
08/12/18 22:36:44
i=i+1はEndIfとLoopの間だと思う。

sheets(2)の列x(初期値1)を削除した後のループで再び削除する時にはxがインクリメントされてるから初期状態の列番号でいう所の3列目が削除されると思うがそれで良いのか、ふと疑問に思った。

どちらもエラーの原因じゃないけど。
というか、俺には「○×のプルダウンが入ってます」の意味が理解できない。
すまんな。

119:デフォルトの名無しさん
08/12/18 22:46:18
あとcolums→columns、だね

それでもif文の行にはエラーは出ない。
力になれなくてすまんな。

120:デフォルトの名無しさん
08/12/18 22:48:29
そうでした^^;
たしかにインクリメントしないといけませんね

Dim i As Integer
Dim y As Integer
Dim x As Integer

x = 1
i = 2
y = 4


Do Until Cells(i, y).Value = ""

If Cells(i, y).Value = "○" Then
Sheets(2).colums(x).Delete
x = x - 1

End If
i = i + 1
x = x + 1

Loop

End Sub


これでやったらif文にオブジェクトはプロパティかメソッドをサポートしてない
ってでてまたエラーになってしまいました

121:デフォルトの名無しさん
08/12/18 22:53:48
ありがとうございます!
columnsがまちがっていたようでした
無事いけました
ご指摘いただいたcolumnsが間違っていたことが一番の原因だったようです

122:デフォルトの名無しさん
08/12/18 23:16:55
失礼します


シート1から実行するとしてセルB2には名前という文字が入っております
const mojicell as string "B2"

のようにしてシートの対応するセルに格納されてる値をとりだすことはできますか?
やってみたところ、セルを格納するのはできなかったので・・・何か方法があるのかと思いまして

実際どのように試し方といいますと

Sheets(mojicell).cells(...... のように使いました。
SHeets("名前").cells(...  に置き換えられるかとおもっていたのですが、
実際はSheets("B2")と 入っておりました。

const で指定したセルが参照する値を格納することはできないのでしょうか?

123:デフォルトの名無しさん
08/12/18 23:19:36
セル参照だけならrangeオブジェクト使いなさい。
シートまで含むならまずconstの値を工夫しなさい。

124:デフォルトの名無しさん
08/12/18 23:21:20
>>122
const mojicell as string = "B2"
worksheets(range(mojicell).value).cells(...

125:デフォルトの名無しさん
08/12/18 23:50:23
>>124
これだと
シート1からこのマクロ実行してシート1にあるセルを参照するならわかりやすいですが
シート2からこのマクロを実行してシート1にあるセルを参照するとなると、
できなくなるのでは?

126:デフォルトの名無しさん
08/12/19 00:50:28
>>124
これだとエラーでます・・・

127:デフォルトの名無しさん
08/12/19 00:59:34
A17にテストという文字をセットしておくとします

Sub tes2()
Const moji As String = "A17"
Sheets("テスト").Cells(3, 1).Value
Sheets(Range(moji).Value).Cells(3, 1).Value

これだと下の文がインデックスが有効範囲にないとエラーでます

128:デフォルトの名無しさん
08/12/19 01:03:33
>>127
"A17"は、シート名じゃねーだろ

129:デフォルトの名無しさん
08/12/19 01:06:10
>>128
これの意味するところは
range("A17").value = テスト   という所なのでは?
よって
sheets("テスト")  と>>124さんがおっしゃってた意味かとおもってたのですが
動作がうまくいかないということは違いますよねorz

130:デフォルトの名無しさん
08/12/19 01:16:52
>>129
どのシートの"A17"で
どこのマクロだよ

131:デフォルトの名無しさん
08/12/19 01:18:18
>>129
右辺を書け!

132:デフォルトの名無しさん
08/12/19 01:23:35
sheets(1)にあるマクロでsheets(1)のA17セルには、テスト という値が入っております

で、このsheets(1)のA17セルの値をconstとして間接的に参照できる形にして
sheets("テスト")の3行1列目のセルの値を取得します


でも、なぜか
print Range(moji).value
テスト
とは表示されるのに、先ほどの下の文では表示されません


133:デフォルトの名無しさん
08/12/19 01:26:27
Sheets(Range(moji).Value).Cells(3, 1).Value

これではインデックス範囲のエラーがでますorz

134:デフォルトの名無しさん
08/12/19 01:35:00
実際のファイルを作って、アップしろ

135:デフォルトの名無しさん
08/12/19 01:42:37
Sub tes2()
Const moji As String = "A17"
Sheets("Range(moji).Value").Cells(3, 1).Value
End Sub

sheets(1)のA17セルには、テスト という値が格納されている
sheets("テスト")のセル(3行1列目)の値には、たとえば 100 といった値が格納されている

このマクロをsheet("テスト")にて実行する方法ということです
今のままじゃエラーがでますので

136:デフォルトの名無しさん
08/12/19 01:46:07
>>135
実際に作ったものをアップしろって

137:デフォルトの名無しさん
08/12/19 02:16:52
まったくわからない・・・

138:デフォルトの名無しさん
08/12/19 02:19:01
うpされたものを拾う気はあるのかや?俺には無いよ。めんどくさい。

質問の意味不明度が増してきたのでそろそろ寝てほしいと思う。適当に脳内補完してみたから。
const moji as string = "A17"
debug.print worksheets(sheet(1).range(moji)).cells(3,1)

139:デフォルトの名無しさん
08/12/19 02:22:16
>>138
それを実行してみたところ型が一致していません。とでました。

140:デフォルトの名無しさん
08/12/19 02:23:02
>>138

>>135
>Sheets("Range(moji).Value").Cells(3, 1).Value
この辺の行の意味不明度からして、根本的な間違いがあると思う。

141:デフォルトの名無しさん
08/12/19 02:24:54
シートの名前は
1がSheet1
2がテスト
です。

Sheet1のA17セルには、テスト と書かれています。他のすべてのセルは空白です。
テストのcells(3,1)の場所には適当に文字を書き込んでいます。

で、お教え頂いたマクロを実行したところ>>139のエラーがでました。
const moji as string = "A17"
debug.print worksheets(sheets(1).range(moji)).cells(3,1)

142:デフォルトの名無しさん
08/12/19 02:26:16
>>141
だから、実際のものをアップしないと話にならねーって

143:デフォルトの名無しさん
08/12/19 02:35:29
>>138
デバッグどころかコンパイルも通らない物貼り付けて、えらそうに・・・

144:デフォルトの名無しさん
08/12/19 02:37:35
うーむ、簡単に見えてむずかしいようですね・・・

145:デフォルトの名無しさん
08/12/19 02:41:18
>>144
オマエが単純に間違ってんだよ。
現物をアップしろよ

146:デフォルトの名無しさん
08/12/19 02:43:48
ごめんよ、テストなんてしてなかったからさ。

だいぶゴツクなっちゃったけど、それでもよければどうぞ。
Sub test()
Const moji As String = "A17"
Dim sh As Worksheet
Dim obj

For Each obj In ThisWorkbook.Worksheets
If obj.Name = Worksheets(1).Range(moji) Then
Set sh = obj
Exit For
End If
Next obj

If IsObject(sh) And (Not sh Is Nothing) Then
MsgBox sh.Cells(3, 1)
End If

End Sub

147:デフォルトの名無しさん
08/12/19 02:44:20
sheet1のA1セルに テスト  と入力します
sheet2のシート名を手動でテストという名前に変更します
sheet2のA1セルに 値 と入植します

このブックをつくって
マクロを
sub テスト()
const moji as string = "A1"
debug.print worksheets(sheets(1).range(moji)).cells(1,1)
end sub

これでエラーがでてしまうということです。下から2行目のところにエラーが・・・

148:デフォルトの名無しさん
08/12/19 02:45:00
>>147
それはもういいんだよ。
現物上げろよバカ

149:デフォルトの名無しさん
08/12/19 02:45:47
>>146
さすがにこれは長いですね・・・

150:デフォルトの名無しさん
08/12/19 02:46:35
>>148
現物をあげてダウンロードするまでにかかる時間のほうが長いと思うのですが・・・・


151:デフォルトの名無しさん
08/12/19 02:47:40
>>150
こんだけバカなんだから、根本的なところで間違ってんだよ。
どのセルに何の値を入れてるのかさえ、あてにならない。

152:デフォルトの名無しさん
08/12/19 02:48:58
>>150
概ね>>135通りのコードを書き込んで、コンパイルもしてないだろうさ


153:デフォルトの名無しさん
08/12/19 03:05:44
もっとスマートに出来ないものかとぐぐったけどINDIRECTばっかでてくる…orz
VBAでの良策ってどんなだろう。

>>149
長いのが気になるだけなら別関数にしてね^^

154:デフォルトの名無しさん
08/12/19 03:06:30
でもこれじゃconstでセルを指定しずらいというか面倒なのって痛いですね

155:デフォルトの名無しさん
08/12/19 03:10:01
>>154
オマエがバカなだけ。
Debug.Printもついてない行でエラーになるのはあたりまえ。

156:デフォルトの名無しさん
08/12/19 03:11:19
>>155
先ほどdebug.printがかかれてたマクロを実行してもエラーがでたのですが・・・

157:デフォルトの名無しさん
08/12/19 03:13:36
ごめん。それは俺のミス。

以上で終了──

158:デフォルトの名無しさん
08/12/19 03:13:43
>>156
rangeのデフォルトはValueじゃない。
それとDebug.Printが付いてないやつとは別のコード。
その区別がつかないのは、バカだから。

159:デフォルトの名無しさん
08/12/19 03:31:01
おぉ。rangeってrangeなのね。そうなのね。
そおしたら随分と無駄なコード書いてきたんだなぁ今まで。反省orz

160:デフォルトの名無しさん
08/12/19 07:04:25
rangeが指定する値を保存する方法って?

161:デフォルトの名無しさん
08/12/19 07:10:54
オブジェクト変数にrangeをセット

162:デフォルトの名無しさん
08/12/19 13:17:19
>>147
質問するとき小文字でコードアップするんじゃねーよ。
実際にVBEからコピペしろ。
回答者でも長いコードをオール小文字とかオール大文字は嫌味なくらいだ。

Sub テスト( )
Const moji As String = "A1"
Debug.Print Worksheets(Worksheets("Sheet1").Range(moji).Value).Cells(1,1).Vallue
End Sub

と.Valueが抜けてるから型が一致しないとなるんだよ。
最後の.Valueはなくても動くが途中のは必須。
>>158が書いてるのはこういうこと。

163:デフォルトの名無しさん
08/12/19 13:22:11
>>162
その発言、なんかのギャグ?

164:デフォルトの名無しさん
08/12/19 13:25:02
>>162
流れから見てその件はもう終わったものかと思っていたが・・・
勘違いかな?

165:デフォルトの名無しさん
08/12/19 14:00:42
日本人はひとつのジョークで3回笑う
1回目はジョークを聞いたとき
2回目はジョークの意味を教えてもらったとき
3回目は家に帰った後、やっとジョークの意味がわかったとき


166:デフォルトの名無しさん
08/12/19 14:09:44
excel2002 SP3を使っています。

以下のようなへたくそなマクロを作りました。

------------------------ここから------------------------

Private Sub Macro1()
Worksheets("IV").Range("B2:B96").Select
Selection.Copy
Worksheets("IV").Range("C2").Select
Selection.Insert Shift:=xlToRight
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Worksheets("IV").Columns("C:C").Select
Worksheets("IV").Application.CutCopyMode = False

nextTime = Now() + TimeValue("00:01:00")
Application.OnTime nextTime, "Macro1"
End Sub

------------------------ここまで------------------------

"IV"のシートを表示させているときは問題なく動作するのですが、
他のシートを表示させると以下のエラーとなって動作してくれません。

実行エラー"1004"RangeクラスのSelectメソッドが失敗しました。

何がいけないのか教えていただけますでしょうか。お願いします。

167:デフォルトの名無しさん
08/12/19 14:13:32
>>166
アクティブにしないとセレクトできないんじゃないの?


168:デフォルトの名無しさん
08/12/19 14:24:07
>>167
そうなんですか。困ったな。。。

普段は他のシートを表示させているので、
非アクティブでも動作をさせるにはどうしたらいいですか?

169:デフォルトの名無しさん
08/12/19 14:40:39
Worksheets("IV").Range("B2:B96").Copy
Worksheets("IV").Range("C2").Insert Shift:=xlToRight
Worksheets("IV").Range("C2").PasteSpecial ...
Application.CutCopyMode = False


170:デフォルトの名無しさん
08/12/19 14:51:43
>>169
おおおおおお!!!!!!
ありがとおおおおお!!!!
さっそくやってみます。

171:デフォルトの名無しさん
08/12/19 14:56:51
>>169
できたああああ!
ありがとう!!!!
感謝感謝!!!!

172:デフォルトの名無しさん
08/12/19 20:04:42
質問させてください。
指定した範囲内にあるデータの種類の数を取得するにはどうしたらいいでしょうか?
汚いながらもVBAで配列に入れながら総当りで調べることはできるのですが
ワークシート関数でそのようなものがあれば高速なのでそちらを使いたいと思っています。

例:範囲 A1:C3
  A   B  C 
1 山  川  海
2 海  海  川
3 川  都  南

この場合、「山、川、海、都、南」の5種類が出現するので 5を返してくれる関数を知りたいです。

よろしくお願いします。

173:デフォルトの名無しさん
08/12/19 20:14:52
このファイルで別シートからマクロを実行して
特定の列だけ抽出して別のシートに表示したいです。

列を抽出するとき、たとえばA列とC列とE列を削除して表示させたい結果が
下のテーブルです。

このように別のシートからマクロを実行して他の別シートに抽出した結果を表示させるには
どのようしすればいいでしょうか?
単にセル結合を考えない抽出ならできるのですが、
セル結合も考慮して、元の分類タイトルがあるまま抽出するにはどういった
手順でやるのが最適でしょうか?よろしくお願いしますm(__)m

ファイルは以下のやつをみていただければわかりやすいかとおもいます
URLリンク(www.dotup.org)

174:デフォルトの名無しさん
08/12/19 22:38:02
101で質問したものです。
もぐらたたきが大まかですがだいたいできたので
UPします 
URLリンク(www.mediafire.com)
URLリンク(www.mediafire.com)

まだもんだいはありますがよろしければ批評してください

175:デフォルトの名無しさん
08/12/19 23:33:05
>172
配列数式でも良ければ
{=SUM(1/COUNTIF(A1:C3,A1:C3))}

176:デフォルトの名無しさん
08/12/20 00:54:59
>>172
配列の使い方はどうしてる?
for eachで選択範囲をコレクションとして、
.valueが配列に含まれていなかった場合には、配列にぶち込んで、
最後にuboundでカウントすれば高速だと思うんだが。

このロジカルなら一瞬だと思うけど。
配列で総当たりってのがちと気になった。




177:デフォルトの名無しさん
08/12/20 01:05:35
>>173
シート名を明示してやればOKだね。

タイトル行が空白だったら、空白じゃなくなるまで左に移動してタイトルを取得する。

これを組むのが面倒なら、
結合を全部解除して、全てのセルにタイトルを振ってしまう。
最後に、重複するタイトルの場合に削除なりmergeなりで処理すれば良いと思う。

削除って考えじゃなくて、抽出したい物を残すって考えにしないとタイトルは取得出来ないな。

178:デフォルトの名無しさん
08/12/20 08:34:25
>タイトル行が空白だったら、空白じゃなくなるまで左に移動してタイトルを取得する。

抽出してしまった場合、左にもうタイトルはないのではないでしょうか?
あらかじめこれも全ての結合を解除したという前提かな?
でも左に移動してタイトルを取得する場合、元からタイトルがない行があった場合
たとえば、メーカーというタイトルが最初からなかったとすると、本来なくていいタイトルに
別のタイトルが埋め込まれますよね?
このファイルに対してはいけそうですが、ない場合は大変かな?

>結合を全部解除して、全てのセルにタイトルを振ってしまう。
>最後に、重複するタイトルの場合に削除なりmergeなりで処理すれば良いと思う。

これもタイトルがない行があった場合、処理に困るかな・・・

追加、条件で大変申し訳ないですが、もしタイトルが空白のセルがあった場合はこれじゃ難しいでしょうか?

179:デフォルトの名無しさん
08/12/20 12:23:58
すみません。CLASSモジュールの書き方がわからないんですが
どこかに説明しているサイトないですか?

180:デフォルトの名無しさん
08/12/20 12:29:58
>>178
元からタイトルが無い列があるなんて知らないし。
てか、excelでレイアウトするなら、VBAで処理しようと考えない事だな。

人間が見やすい見た目と、計算機が処理しやすい(出来る)のは全く違うからね。
帳票として見やすく加工・レイアウトするのは、全ての演算処理が終わってから最後にやるもの。
レイアウトされたものに処理を掛ける事ほど無意味かつ煩雑になる事はないぞよ。

いったん全部のmarge解除して、全てのタイトルをはめ込むしかないでしょ。

181:デフォルトの名無しさん
08/12/20 19:32:18
Excel2003を使ってます。
VBAの勉強をしたいのですが、良い本や教材はありますでしょうか?
バカでもわかるようなのでいいです。

182:デフォルトの名無しさん
08/12/20 22:48:34
VBAで何やりたいの?


183:デフォルトの名無しさん
08/12/21 00:50:07
質問です。

アクティブになっているシートから別のシートを選択したいのですが、
エラーが出てとまってしまいますが、なぜでしょうか?

エラーの内容はシートの保護がかかっている状態で、
そのシートを選択したとき(Activate)と同じエラーです。

エクセル2003で、自宅PCでは動作しますが、会社PC(2003だと思う)ではダメです。
もちろん保護ははずしましています。
考えられる原因はなにがあるでしょうか。

文章がわかりにくかったらすいません。

184:デフォルトの名無しさん
08/12/21 02:20:11
>>183
>>167


185:166
08/12/21 12:41:12
>>166です。先日はありがとうございました。
動作のたびに画面がフラッシュして非常にストレスを感じます。

Insert Shiftが重たいのかなとおもうのでInsert Shiftを使わず、
C列、D列、E列・・・と列の最後尾に貼り付けたいと思うのですができますか?
(xlToRightを使うのかな・・・)

あとクリップボード経由だとこれまた重たいようなので、
クリップボードを使わずにそのまま貼り付けできればいいのかな
(Destinationを使う???)と思っているのですが、どうなのでしょうか?


作成したマクロは以下です。アドバイスください。
よろしくお願いします。

---------------ここから---------------

Private Sub Macro1()

Worksheets("IV").Range("B1:B96").Copy
Worksheets("IV").Range("C1").Insert Shift:=xlToRight
Worksheets("IV").Range("C1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

nextTime = Now() + TimeValue("00:01:00")
Application.OnTime nextTime, "Macro1"

End Sub

---------------ここまで---------------


186:デフォルトの名無しさん
08/12/21 13:44:32
>>185
画面がフラッシュするのは仕方ないと思うぞ。Windowsってのはそういうもんだ。
とりあえず右端にコピーする方法
Worksheets("IV").Activate
Range("B1:B96").Copy Destination:=Range("IV1").End(xlToLeft).Offset(0, 1)

187:デフォルトの名無しさん
08/12/21 13:53:12
>>185
細かいことを言うと、それだと処理が1分よりも少し長い間隔で実行される。
nextTimeはSubの先頭でセットした方が誤差が少なくなる。

188:デフォルトの名無しさん
08/12/21 14:27:42
>>186>>187

ありがとうございます。値貼り付けにできますか?
あとこのマクロは時間処理が少しおかしいです。

しばらく席を離れて画面が黒くなりパソコンが待機状態になったとき
(マウスを触るとすぐに画面は表示される状態)などマクロがとまってしまいまいます。

そして再度実行させると、たまっていた処理を一気に吐き出すような感じで、
3連続処理を繰り返すことが多々あります。安定動作にはまだまだ遠いです。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5098日前に更新/259 KB
担当:undef