[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 12/14 12:55 / Filesize : 253 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part5



1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ]
ExcelのVBAに関する質問スレです

質問前に 【 >>2-3 】 あたりを良く読むこと

前スレ
pc11.2ch.net/test/read.cgi/tech/1189814602/

2 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:28:23 ]
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
   
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。 
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。


3 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:29:01 ]
・過去スレ

01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/

4 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:29:50 ]
テンプレの最中にuncoを挿入する

5 名前:デフォルトの名無しさん [2007/12/12(水) 17:53:17 ]
セル1に「1」と入力するとセル2に「A」と出力,同様に「2」と入力すると「B」と出力するようにするためにはどうすれば良いですか?

どなたか教えてくださると助かりますm(_ _)m

6 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:04:32 ]
いつまでやるんだよ・・・

7 名前:前スレのクレクレ君 [2007/12/12(水) 18:16:45 ]
いや、私じゃないですよ

8 名前:デフォルトの名無しさん [2007/12/12(水) 18:31:18 ]
前スレの>>1000
hoge = Selection.Value のSelectionが結合セルだと2次元配列になる。
結合セルをSelectしないでhoge = Range("A1").Value とすれば2次元配列にならない。
2次元配列なら MsgBox hoge(1,1) としないと動かないが、2次元配列じゃなければ
MsgBox hoge で動く。

9 名前:前スレのクレクレ君 = 1000 [2007/12/12(水) 18:37:44 ]
>>8
な、なるほど!

10 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:48:01 ]
>5
セル2に式「=CHAR( セル1 + 64 )」をいれときゃいいんでね?
VBAは関係ないけど。



11 名前:デフォルトの名無しさん [2007/12/12(水) 19:08:09 ]
1. 1900年から2008年までのうるう年を見つけて、一個のメッセージボックスにすべてのうるう年を表示するようにプログラムを作成する。

2. 下記の数値の和を繰り返し文を使用して算出しなさい。

1+2+3+4+……+100

1の二乗+2の二乗+3の二乗+……+20の二乗

1の三乗+2の三乗+3の三乗+....+20の三乗


これをExcelVBAを使って解かなきゃいけないんだけど全くわかりせん。
どなたか教えていただけませんでしょうか。


12 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:21:00 ]
>>2
>★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
>  コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
>  ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

13 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:46:39 ]
>>11
1. MsgBox 閏年 & 閏年 & 。。。

2. 1^2+2^2+3^2 。。。 +20^2


14 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:23:03 ]
Sub 空白セル削除()
Worksheets("Sheet1").Activate
For i = 1 To 1000
If Cells(A, i) = "" Then
Cells(A, i).Delete shift:=xlUp
End If
Next
End Sub

これのダメなところを教えてください。
エラーが出るんですよね

15 名前:5 mailto:sage [2007/12/12(水) 21:33:13 ]
>>10
おおっ ありがとうございます!!
スレ違いでしたねすみません

16 名前:デフォルトの名無しさん [2007/12/12(水) 21:39:20 ]
エラーで止まったところをヘルプで調べないお前の姿勢がダメだろう。

17 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:48:03 ]
>>16
ワラタw

>>14
セルズA,iを 1,i に変えたらうごいたぜ。  Excel2007  だけどな。

18 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:49:00 ]
もはや全部ダメって言い切って良いな


19 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:59:26 ]
>>18
そうか?

Sub 空白セル削除()

ここら辺はわかりやすくてよい。

20 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:07:00 ]
>>16
すいませんでした
以後気を付けます
>>17
thx
マクロはじめたばっかで基本的な勘違いをしてたぜw
>>18
是非参考コードをお願いします。



21 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:41:02 ]
Mougでも隅から隅まで眺めてこい

22 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:57:16 ]
なんだ自分ではたいしたコード書けないのにコード乗ってるサイト知ってるだけで出来ると思ってる人間かw

23 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:45:19 ]
oshietekun
you ga sundara
beroberobaa

24 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:55:37 ]
Rangeのポインタを渡すにはどう記載すればよいでしょうか?

25 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:16:51 ]
逆にRangeの実体を渡す方法があったら教えて欲しい


まあインデックスのポインタのことだろうけど

26 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:41:43 ]
byvalとbyrefの話?

27 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:37:33 ]
Dim Data AS Variant
Dim d AS Variant

Redim Data(1,20)
Redim d(1,60)
dには{1,4,3,〜(60個の数値)〜}が入っている
kukanにも区間データ(20個)が入っている。

Data(2行目に入れたい)=Worksheetfunction.Frequency(d,kukan)
→Data二次元配列の2行目に答えを入れるにはどう記載すればよいでしょうか?

28 名前:デフォルトの名無しさん [2007/12/14(金) 01:08:47 ]
userformのspinbuttonでmouseupしたときに押し続けまでカウントされた値を
処理できますか たとえば1から100までアップしたとき
changeだと100回処理しなけらばならないので
mouseupで100の値についてだけ処理したいのです

29 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 05:42:32 ]
マジな回答が欲しいヤツは、とりあえず解読可能な質問をしる


30 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 07:42:42 ]
>>27
dに60個のデータって、61個じゃないのか?
それにDataもdも整数なのになんでVariant型?
それはおいとくとして、ループを回せばいいだろ
f = Worksheetfunction.Frequency(d,kukan)
For i = LBound(Data,2) To UBound(Data,2)
Data(1,i) = f(i + 1,1)
Next



31 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 07:52:37 ]
>>30

>>27
> dに60個のデータって、61個じゃないのか?
確かにそのとおりです。

> それにDataもdも整数なのになんでVariant型?
二次元配列を使っているので。配列はVariant型って考えは間違っていますか?

> それはおいとくとして、ループを回せばいいだろ
> f = Worksheetfunction.Frequency(d,kukan)
> For i = LBound(Data,2) To UBound(Data,2)
> Data(1,i) = f(i + 1,1)
> Next
Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので、それを二次元配列Dataに入れたいのです。


32 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 07:57:53 ]
>>31
>二次元配列を使っているので。配列はVariant型って考えは間違っていますか?
間違ってる。整数なら普通IntegerかLong

>Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
Frequencyの戻り値は1ベースの2次元配列だろ?


33 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 08:09:57 ]
補足しとくが
Dim Data() As Long
みたいに宣言するんだからな。

34 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 08:20:37 ]
もしかしてDataとかdにはセル範囲の値を一括して代入してるのか?
だったらVariantでいい。ただRedimは不要。

35 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 08:50:14 ]
>>34

> もしかしてDataとかdにはセル範囲の値を一括して代入してるのか?
> だったらVariantでいい。ただRedimは不要。
逆です。Dataの値を後でセル範囲に一括して代入します。
Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。

36 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 08:54:53 ]
>>32
> >Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
> Frequencyの戻り値は1ベースの2次元配列だろ?えっ!?区間と度数の二次元配列ですか?調べたつもりが。。。
ということはfをあるセル範囲(2×n)に代入すればよいということですね。


37 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 09:28:16 ]
>>36
>Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。
Variant型の変数に代入する場合不要ということ。
d = Range("A1:E1").Value
みたいなときのことね。

>区間と度数の二次元配列ですか?
度数だけの2次元配列。

>ということはfをあるセル範囲(2×n)に代入すればよいということですね。
2×nじゃなくて1×n
縦じゃなくて横なならTransposeしないと出来ない。
縦1列ならそのまま可


38 名前:デフォルトの名無しさん [2007/12/14(金) 09:58:09 ]
vbaのreplace関数って、指定の文字列がない時に何か
値を返すことって出来ます?

置換前の文章と照合するしかにあ?

39 名前:37 mailto:sage [2007/12/14(金) 10:29:12 ]
補足しとくがdとかkukanがセル範囲から取り込んだものなら、そんな配列は必要ないからな。
仮にデータがA1:A61にあり、区間がB1:B20なら
f = Worksheetfunction.Frequency(Range("A1:A61"),Range("B1:B20"))
でいい。引数を変数にするならRange型だ。
戻り値は区間より一つ多い11x1,の2次元配列になってる。
一つ多いのは区間の最後のデータより大きいもののカウント用


40 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 10:33:22 ]
>>38
置換前の文字列と照合するか、先にInStrで調べてからでもいいんじゃない?



41 名前:39 mailto:sage [2007/12/14(金) 10:35:05 ]
マチガイ
戻り値は区間より一つ多い21x1の2次元配列な

42 名前:デフォルトの名無しさん [2007/12/14(金) 10:59:42 ]
replaceだけ、頭文字が大文字にならないのは仕様ですかw

43 名前:デフォルトの名無しさん [2007/12/14(金) 11:10:28 ]
>>40
あ、そうか

44 名前:デフォルトの名無しさん [2007/12/14(金) 16:16:50 ]
aaapapaaaaaaapaaaap という文があったとして、
これをp毎に分割するにはどうすればいいでしょうか。

instrでpの場所を探して、その文字数分leftで取り出せばいいと思うのですが
もっといい方法は無いでしょうか。

45 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 16:39:59 ]
>>44
VB6スレいけ

46 名前:デフォルトの名無しさん [2007/12/14(金) 16:57:07 ]
VB6スレって、2バイト文字ばっかりじゃないですか

47 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:32:08 ]
>>46
行けばわかる

48 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 18:16:47 ]
>>44-46
そんなに目くじらたてなくてもいいんジャマイカ
pで分割してセルに書き込むのかも知らんしだろ?
つSplit関数

49 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 18:25:14 ]
>>42
Replace関数もReplaceメソッドも頭文字は大文字になるぞ?
変数の宣言で使ってるとかプロシージャ名で使ってるとかなんか変なことしてるんじゃない?

50 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 22:48:14 ]
独学するのにお勧めの書籍ありませんか?

プログラミングは初心者です。
かつてHTMLとCSS、javascriptをほんの少しだけ学校の夏期講座で勉強した程度です。



51 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 23:07:13 ]
>>50
Excelでお仕事
でぐぐる
「VBA基本」を見る

書籍不要。

52 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 00:25:54 ]
>>51
そこだと変なクセがつかないか?
最近見てないけど、前みたときはあまりいい内容ではなかった。

53 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:42:55 ]
>>50
VBAエキスパートの参考書をやってから
あとはリファレンスとして上記のEXCELでお仕事を参照すればいいと思う

54 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 15:21:49 ]
稚拙なHPを読んで機会損失するコストを考えたら、3,4千円の書籍を購入する
コストは非常に安い。

55 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 15:40:30 ]
どの言語もそうだけど最終的に書籍はリファレンスだけしか要らなくなる

56 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 18:59:33 ]
あのサイトの人、VBAに関してはかなり下手だぞ?
VBAのリファレンスにはならねーな。

57 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 19:37:34 ]
ほとんどの人が代案を出せずに
一人の出した案を叩くばかりという状況にワロタ

まあ、ここの回答陣がVB(A)初心者だったのが
何年前かと考えると…
古すぎてもう売ってないとか
対応バージョンがExcel95とか、
当時はWebとかほとんど無かったとか
そもそも他言語から入ったとかだろうから
仕方ないだろうけど。

>>50
まあAmazonの書評でも見るか
(これもあてにはならないが、ここよりは…)

もしくは適当なVBA本の著者名でぐぐると
サイト持ってて入門編を公開している人もいたりする。

58 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 21:25:06 ]
田中亨おすすめ。
mougの人は嫌い。

59 名前:デフォルトの名無しさん [2007/12/17(月) 10:52:50 ]
>>49
replaceは名前としては一切使ってないのですが
(過去にそのプロシージャ内で使ったことがあるかも・・・)
なぜか、小文字です・・・。

あと、古いExcel97では、replace使えないんですね。ショック・・・
サブルーチンで誰か作ってないかな。

60 名前:デフォルトの名無しさん [2007/12/17(月) 10:59:20 ]
>>48
ありがとうございます



61 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 14:47:55 ]
>>59
Excel97でもOSが古すぎない限り(古くてもWSHをインストールすれば)
ツール→参照設定で
「Microsoft VBScript Regular Expressions 5.5」に参照設定して
RegExpオブジェクトの.Replaceを使えば

ただしReplace関数より機能は高いが
正規表現な分ハードルも高い。

62 名前:デフォルトの名無しさん [2007/12/17(月) 17:55:16 ]
>>61
ウホッ
確かに難しそうだ

63 名前:デフォルトの名無しさん [2007/12/17(月) 18:15:07 ]
>>59
横レスだが、折れも、ずいぶん前に、何ヶ月前ぐらいかな?
何かの時にrangeが1カ所だけRangeにならないことがあった。いろいろと試していたときだった。そこだけ、いろいろと書き直しても小文字のままだったので、
折れも同じように、気になって聞いたが、誰も答えようがなかったみたいだった。
チャンと動いておれば、気にしないでオケw


64 名前:デフォルトの名無しさん [2007/12/17(月) 19:04:02 ]
*.shapes(1).DrawingObject.Text = *.Cells.Value(1.1)

' ↑(Chart)              ↑(Sheet)

EXCEL2000だと正常に動作する上記のようなコードがあります。
EXCEL2007だと、
"指定したコレクションに対するインデックスが境界を超えています。"
というようなエラーが出てしまいます。
(上記コードをコメントアウトすると正常終了します)
普通のシートのセルの文字列を、グラフシートのラベルにコピーする
コードなのですが、2日ほどひたすら検索しましたが、
何が原因なのかがわからない状況です。仕事場からソースを持ち帰ること
ができないので、これだけでは解析不能かもしれませんが、
何かヒントでも頂けたら幸いです。よろしくお願いいたします。

65 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 19:58:17 ]
マクロを記録して味噌

66 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 20:16:50 ]
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Select
Selection.Delete shift:=xlShiftUp

で「A列に何も入っていない行」を削除できますが、
「A列およびB列に何も入っていない行」は削除できませんでしょうか?

Range("A:B").〜とすると
「A列もしくはB列に何も入っていない行」になってしまいます。

結局for〜nextでCells(i,1).value&Cells(i,2).value=""かどうか調べて、みたいなので
動くことは動いたんだけどなにか簡単な方法はないかと。


67 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 22:04:20 ]
>>64
前後関係意味不明
上限がいいかげんなループの中でShape回してるんジャマイカ?

>>66
ない
Range("A:B")とやったところで内部的には1次元でしかないので

68 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 22:35:37 ]
ユーザーフォーム(モードレス)を残してワークシート最小化し
フォーム上のボタンを押してファイル選択ダイアログをだしているんですが
ファイル選択ダイアログがマウスクリックを受け付けてくれません
EXCEL 2000だと問題なく動くのですがEXCEL XPだとこの症状がでます
回避策ないでしょうか

69 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 22:42:18 ]
コードさらせアホが。二度手間じゃ

70 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 22:51:51 ]
こんな感じです
Private Sub Workbook_Open()
Dim oldState
oldState = Application.WindowState
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"
UserForm1.Show vbModeless
End Sub

Private Sub CommandButton1_Click()
Dim fname As String
fname = Application.GetOpenFilename(fileFilter:="txtファイル(*.txt),*.txt,txtファイル(*.txt),*.txt", Title:="txtファイルを選択")
If fname = "False" Then
Exit Sub
End If
End Sub



71 名前:デフォルトの名無しさん [2007/12/18(火) 12:32:52 ]
inputboxを、カイル君や冴子先生のようにするには?
とカイル君に聞いても教えてくれなかった。

72 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:56:20 ]
モードレスは対応するバージョンがあるぜ

73 名前:デフォルトの名無しさん [2007/12/18(火) 14:14:14 ]
inputboxの外観でググっても出ないな。

74 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:24:28 ]
>>68
何も確認せずにレスするんで恐縮だが、最小化じゃなくて、非表示(App~.Visible)とかじゃダメ?


75 名前:デフォルトの名無しさん [2007/12/18(火) 18:54:33 ]
>>65
>>67
ありがとうございました。
マクロの記録で確認しましたところ、shapes〜となるのですが、
そのコードで再度実行すると、やはりそこでエラーになってしまいました。
それからまたいろいろと調べていたところ、下記を参考にして解決いたしました。
やはり、EXCEL2007が原因だったようです。
www2.moug.net/bbs/exvba/20070920000006.htm

76 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:33:13 ]
コントロールを扱うための知識はコントロールそのものではなく、
実はコレクションってのがVBAの真理だったりする

77 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 22:55:28 ]
>>74
指摘のとおりに変えたらEXCEL XPで動きました ありがとうございます
明日EXCEL2000でも確認してみます

78 名前:デフォルトの名無しさん [2007/12/19(水) 05:50:53 ]
特定の範囲内でランダムに1つのセルの値(文字列)だけ残して他を消す(又は表示させない)
ようにしたいんですがなにか方法ないでしょうか。
ランダムに複数セルの値を取得する→消去 の流れでいいんでしょうか。
ご教授願います。すれ違いだったらすいません。

*例えばA1〜A5に文字列が入力されていて、マクロを実行したらA1のセルの値のみがのこって他を
消すようにできないかと思います。

79 名前:デフォルトの名無しさん [2007/12/19(水) 09:42:17 ]
マクロ歴三日の私が通りますよ

Sub rand()

Range("D" & 1).Formula = _
"=round(rand(),1)*10"

i = Range("D1").Value
Range("A" & i).Select

makura = MsgBox("are you sure to erase?", vbOKCancel)
If makura = vbOK Then Selection.ClearContents

End Sub


80 名前:デフォルトの名無しさん [2007/12/19(水) 09:46:00 ]
あ、残すのか・・・
英語とか・・・色々すまん煎ってくるわ



81 名前:デフォルトの名無しさん [2007/12/19(水) 10:06:52 ]
Sub rand()

yarinaosi:
Range("D" & 1).Formula = _
"=round(rand(),1)*10"

i = Range("D1").Value
If i = 0 Then GoTo yarinaosi

Range("A" & i).Select
Selection.Cut
Range("B" & i).Select
ActiveSheet.Paste
Range("A1:A10").Clear
Range("B" & i).Select
Selection.Cut
ActiveCell.Offset(0, -1).Select: ActiveSheet.Paste

End Sub

82 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:15:59 ]
>>81
その式だと10になる確率が低いんじゃねーのか?
9になるのはround(rand(),1)が8.5以上9.5未満の1の幅があるが
10になるのは9.5以上で半分の幅しかねーな。
ROUNDなんか使っちゃいかんよ。

Range("D1)..Value = Int(Rnd*10)+1
とすれば1〜10の確率はそれぞれ10パーセントだ。

83 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:20:56 ]
ちょっと書き直し
9になるのはrand()が0.85以上0.95未満の0.1の幅があるが
10になるのは0.95以上で半分の幅

84 名前:79,81 [2007/12/19(水) 14:14:48 ]
>>83
うーむ、なるほど。

85 名前:デフォルトの名無しさん [2007/12/19(水) 17:53:38 ]
絶対パス付きを取得し、変数filepathに、ファイル名をfilenameに入れて、ファイルを開こうとしています。
しかしフォルダ名に空白があると存在しませんとエラーがでます。
openfile filepath & filename
どのように書けばよいのでしょうか?

86 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 18:00:58 ]
openfileが悪さしてる

87 名前:デフォルトの名無しさん [2007/12/19(水) 18:06:15 ]
trimしてみては?

88 名前:デフォルトの名無しさん [2007/12/20(木) 05:13:01 ]
htmlの指定したタグの中身を取り出す関数(メソッド?)ってどういうものでしたっけ?
GetOuterHtmlみたいな感じの名前でしたが、手元にVBがなく、ググってもでてこない


89 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 07:41:31 ]
分かってないのに分かったような物言いをしたところで間抜けであることは変わらない

90 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 09:53:17 ]
>>88
スレ違い



91 名前:デフォルトの名無しさん [2007/12/20(木) 11:06:38 ]
以前質問させてもらった者ですが

1+2+3+4+……+100

この和を繰り返し文を使用して出せというのがいまだにわかりません。
この場合For文を使えばいいんでしょうか?
無知で申し訳ないです。

92 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 11:39:16 ]
>>91
スレ違い    For文でできる。 どうしても分からなければVBスレで。


93 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 12:07:29 ]
dim a(100) as integer

for i=1 to 100
a(i) = i
next

msgbox (a(1) + a(100))/2*100

94 名前:デフォルトの名無しさん [2007/12/20(木) 15:01:54 ]
>>90
以前エクセル付属のVBAで使った記憶があるのですが

95 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 15:13:37 ]
>>94
Microsoft HTML Object Libraryを参照設定して、F2でMSHTMLを眺めて、ググるなりしろ。
これ以上の質問はVBスレでやれ。

96 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:04:23 ]
>>93
ワロタw


97 名前:デフォルトの名無しさん [2007/12/20(木) 16:19:13 ]
Sub nnn()
Dim a As Variant
Dim i As Byte
Dim sentence As String
Dim sentence2 As String
''''''''''''''''''''''
Range("A1").Formula = "I am Japanese."

a = Array("I", "am", "Japanese", "living", "in", "USA", ".")
For i = 0 To 6

sentence = Range("A1").Value
sentence2 = Replace(sentence, a(i), "", 1)

Next i

MsgBox sentence2
End Sub


このプログラムで、sentenceをa配列全て使って、
置換したいのですが、
array中の最後の文字しか変換されません。
どうすればよいでしょうか...

98 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:32:06 ]
>>97
かろうじてExcel要素が混じってるが、基本はExcel関係ないぞ。

Forの行にブレークポイントを設定して、ステップ実行させながら、変数の中を見てみろ。

99 名前:デフォルトの名無しさん [2007/12/20(木) 17:03:25 ]
>>98
置換したはずの文字が、ふ、ふ、復活しているよっ!

100 名前:デフォルトの名無しさん [2007/12/20(木) 17:14:26 ]
あ、sentence2はsentenceでいいのか。
むずかしい



101 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 18:53:05 ]
とりあえずUSAには定冠詞のTheを付けるように

102 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 19:18:31 ]
>>91
学校の宿題だったっけ?
>>93のFor Nextで合格点もらえるよ。


103 名前:97 [2007/12/21(金) 09:11:06 ]
この文の位置か・・・
sentence = Range("A1").Value

104 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 19:29:12 ]
もしかしてVBAってMax(i1,i2,i3)みたいなのって無し?
セルの比較ならApplication.Maxとかでいいけど変数の最大値を取得したいときはどーすれば?


105 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 20:31:42 ]
セルに代入してapplication.max使えばいいんじゃね?

106 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 20:53:11 ]
ヘルプ見ろよ

107 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 21:47:26 ]
10分もありゃ汎用性の高い自作関数作れるだろ

108 名前:デフォルトの名無しさん [2007/12/22(土) 00:34:48 ]
汎用性の高い自作関数 例えば?


109 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:17:54 ]
型の範囲を意識しなくていい関数はかなり便利
integerの範囲以上の値入れていちいちエラートラップするのはうざいからな


110 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 08:44:23 ]
integerの範囲以上の値入れていちいちエラートラップする

・・
Variant・・・



111 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 13:51:20 ]
丸め誤差を極力減らしたいのですが、式を記載する上で注意しておきたいことを教えてください。

112 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:26:16 ]
>>111
整数で演算する

113 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:24:32 ]
除算を使わない

114 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:26:38 ]
計算をしない

115 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:43:29 ]
電卓で計算して、Excelに手作業で貼り付け


w

116 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:39:18 ]
極力ってことは・・・一気に計算したら?

117 名前:デフォルトの名無しさん [2007/12/23(日) 00:08:32 ]
>>116
よく本に掲載されているのは、ルートを有利化せずに分母においてるのがあるが、理由がよくわからなくて。

118 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:29:44 ]
EXCELで
人人人人人
2 3 1 4
  1 4 2 3

のように4人でゲームして順位を出す時に、
ちゃんと横の合計が10になるか計算したいのですが
こういう空欄はスルーして計算できませんでしょうか?

119 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:41:46 ]
何も考えずにセル関数Sum使えば終わりでね?

120 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:58:34 ]
>>119
その通りでした。どうもありがとうございます
実は例と少し違って合計0になるかだったので勘違いしてました



121 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:57:25 ]
麻雀かw


122 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:18:28 ]
>>117
コンピュータは分母が整数じゃなくても
それほど困らないからいいんじゃないの?


123 名前:デフォルトの名無しさん [2007/12/23(日) 10:51:16 ]
情報工学勉強すればわかる。

124 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 10:57:09 ]
VBA使うのにいちいち情報工学など勉強しれられっか

125 名前:デフォルトの名無しさん [2007/12/23(日) 11:07:39 ]
VBAに必要な知識は、
1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。

言語に関わらず必要な知識は、
1.誤差伝幡をいかに少なくするか。
2.いかに高速なアルゴリズム(探索など)を知っているか。
3.その他多数〜

126 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 16:14:05 ]
> 1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。

開発効率という観点が欠如しているっぽいあなたには、アセンブラをオススメいたします。

127 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 00:21:03 ]
>>111
桁に限界があるので技術計算には向かないが
固定小数点のCurrency型を使うとか。

128 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 02:05:32 ]
>>111
除算をしないか、ロジックで極力計算回数を減らす。関数の戻りの型に注意。あと、スレ違い。


129 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:14:14 ]
フォルダに0001〜9999jpg
セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか?
よろしくお願いします

130 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:18:51 ]
>>129
セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
4桁に制限したければそういうifを書けばいい。



131 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:02:45 ]
>>93の人ありがとうございました。

1^2+2^2+3^2+……+20^2

1^3+2^3+3^3+・・・・+20^3

ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。

132 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:12:39 ]
宿題か?宿題なのか?

133 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:24:08 ]
そんなことより聞いてくれよ。
というか教えてください。
マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で?
やっぱりファイルが大きすぎるのか?
1ファイルで60MBとか無理なのか?
ご存知の方いたら助けてください。

134 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:29:42 ]
>>133
うん、でかいw限界点とかはわからんが・・・
Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・

135 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:55:12 ]
>>132
そうなんですよ。なんとかお助け願えないでしょうか?

136 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:06:14 ]
for i=1 to 100
a = i
next


137 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:07:09 ]
途中送信orz動作未確認
dim a as integer
for i=1 to 100
a = a + i * 2
next

3は2を変更で

138 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:21:16 ]
>>131

ちょっとまて
>>93を採用する気か?それはなー(略

139 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:22:34 ]
>>137
どいつもこいつも・・・ここはネタすれなのか?

140 名前:デフォルトの名無しさん [2007/12/26(水) 02:24:13 ]
>>138
え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。



141 名前:137 mailto:sage [2007/12/26(水) 02:37:44 ]
すまん、俺は素だったんだw
汎用性もたせるなら累乗関数使うなり作るなりしてくれ。
dim a as integer
for i=1 to 100
a = a + i * i '2乗
'a = a + i * i * i '3乗
next

142 名前:137 mailto:sage [2007/12/26(水) 02:39:07 ]
>>140
ちゃんとみりゃわかる。
>>97はforが入ってるが結局は(1+100)/2*100だ。

dim sum as integer
for i=1 to 100
sum = sum + i
next

143 名前:137 mailto:sage [2007/12/26(水) 02:40:02 ]
はぁい、>>93の間違いねorz
スレ汚し失礼しました。

144 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 03:36:07 ]
志村ー
100じゃなくて20・・・・

145 名前:デフォルトの名無しさん [2007/12/26(水) 13:27:24 ]
>>141>>142
たびたびすいません。これらをメッセージボックスに表示するには
どうしたらいいんでしょうか?

146 名前:デフォルトの名無しさん [2007/12/26(水) 14:22:26 ]
Option Explicit
Sub sum()
Dim sum As Integer
Dim sumMsg As Integer
Dim i As Byte

For i = 1 To 100
sum = sum + i
Next i
sumMsg = MsgBox(sum, vbOKOnly + vbInformation)
If sumMsg = vbOK Then MsgBox "やったね"
End Sub


147 名前:デフォルトの名無しさん [2007/12/26(水) 14:23:38 ]
共有ファイルでVBAを編集するには?

148 名前:デフォルトの名無しさん [2007/12/26(水) 17:17:49 ]
inputboxをキャンセルしたときの挙動なのですが、
これじゃだめですよね・・・

Sub nicochuu()
niwango = InputBox("入力してね", "inputbox")
If niwango = "" Then MsgBox "入力無し": Exit Sub
Range("A1").Value = niwango
If niwango = vbCancel Then Range("A2").Value = "キャンセル"
End Sub


149 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:33:01 ]
横で開いてるIEを3行スクロールさせる方法教えてください。
excelは2000でIEは7です。

150 名前:デフォルトの名無しさん [2007/12/26(水) 19:14:15 ]
三流文系大に通う腐女子です。
以下のマクロ作成方法を教えてください。

プロシージャ「斜め移動」の作成
IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。

プロシージャ「四角移動」の作成
図形が四角形を描くように移動する(移動の軌跡が四角形になる)、
「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。

☆――→
↑   |
|   |
|   ↓
 ←――


プロシージャ「三角移動」の作成
「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。
ただし正三角形でなくてよい。



151 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:22:06 ]
>>133
どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。
ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。
エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。


>>150
どう動かしたいかが良く伝わらない。
マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの?
あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?


152 名前:デフォルトの名無しさん [2007/12/27(木) 02:33:46 ]
セルを複数選択できないようにする(単一セルのみ選択可能)にはどう記載すれば実現できますか?

153 名前:デフォルトの名無しさん [2007/12/27(木) 11:43:39 ]
CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで
読み込みさせたいのですが、

Do Until EOF(intFF)

をどうすればいいのかわかりません。
お願いします・・。

154 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 12:41:59 ]
>>152
これで目的の動作をするかどうかはわからないが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then
ActiveCell.Select
End If
End Sub

>>153
一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。

155 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:21:44 ]
>>153
ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。
ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては?
pc11.2ch.net/test/read.cgi/tech/1187667616/l50


156 名前:デフォルトの名無しさん [2007/12/27(木) 15:59:23 ]
サンクスコ
スレ違いの基準が分からんぽ

157 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:50:30 ]
スレ違いとかいう奴うぜー
いっそVB6スレと統合しろ

158 名前:155 mailto:sage [2007/12/27(木) 18:25:58 ]
>>156
>>2
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。


159 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:15:14 ]
アルゴリズムとかはVB6だろうけど
初心者はわからんだろうしなあ
まあそのときの気分であしらってるけどね


160 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:16:58 ]
>>154
サンクスです。




161 名前:デフォルトの名無しさん [2007/12/27(木) 19:19:39 ]
>>158

>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。
すべてこちらに包含するという考え方もある。

162 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:51:01 ]
自治厨が湧いてきました

163 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:09:25 ]
自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと
2chのルールやスレのルールを指摘するのは自治厨行為ではなく
逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について

164 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 02:04:11 ]
どっちでもいい。はやく次の質問へ

165 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:36:53 ]
>>2は別にこのスレの合意事項というわけではない。
過去スレのどこかで、誰かが勝手にテンプレに入れただけ。
なので、あまり気にするな。

166 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:43:01 ]
そうでもないか

167 名前:デフォルトの名無しさん [2007/12/28(金) 12:03:27 ]
以下のケースでVBAの処理を止める方法は?(強制終了以外で

on error gotoでmsgboxに行く仕様になっているため、
あと50000回くらいmsgboxをokし続けなければならない。
escを押しても、msgboxのok扱いにしかならない。orz

168 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:14:00 ]
電源断。

169 名前:デフォルトの名無しさん [2007/12/28(金) 12:17:23 ]
enterをテープで止めて、トイレ行ってる間に
終わってた。

170 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:27:46 ]
msgboxのあとプロシージャをぬければいいんじゃね



171 名前:デフォルトの名無しさん [2007/12/28(金) 12:31:09 ]
もう実行しちゃった後の話よ

172 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:34:42 ]
50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな
50000回押せばいいよな

173 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:48:51 ]
>> 167
混じれ酢するとCtrl + Break

174 名前:デフォルトの名無しさん [2007/12/28(金) 13:15:17 ]
ありがとうござます
こんなキー初めて使うわ

175 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 13:25:13 ]
>>174
押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。


176 名前:デフォルトの名無しさん [2007/12/28(金) 15:12:43 ]
良からぬsiteを見ている途中に、excelが勝手にsaveを始めて
あたふたすることってありますよね。

177 名前:\_____________/ mailto:sage [2007/12/28(金) 16:11:29 ]
      ∨
   |/-O-O-ヽ| ブツブツ・・・
   | . : )'e'( : . |
   ` ‐-=-‐
   /    \
||\ ̄ ̄ ̄ ̄ ̄ ̄ \
||\\.          \      ∧_∧
||. .\\          \    ( ;´Д`) (オイ、なんか変なのがいるぞ)
.    \\          \ /    ヽ.
.      \\         / .|   | |
.        \∧_∧   (⌒\|__./ ./
         ( ´,_・・`)目合わせるなって ∧_∧
.         _/   ヽ          \  (     ) うわー、こっち見てるよ

178 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:52:13 ]
セル範囲から検索できるactivecell.findみたいな関数ありませんか?

(D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが



179 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:53:12 ]
ってここVBAのスレじゃん
失礼。出直してきます

180 名前:デフォルトの名無しさん [2007/12/28(金) 22:22:11 ]
いきなり長文にて失礼します。
生年月日の昭和・平成をまるで囲むため、中を透明にした楕円を描き、マクロの
自動記録でできた次のものを使用してきました。
ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Excel2000〜2003では、普通に使用できていましたが、2007では楕円の内部が
黒く塗りつぶされてしまいます。
ネットや本で調べてみたのですが、図形描画については記述があまり見つからず
私のスキルでは、難しそうです。
ご教授願えると助かります。




181 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:31:22 ]
2007でマクロの自動記録すれば?

182 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:41:11 ]
>>181
さっそくの書き込みありがとうございます。
やってみたのですが、2007では図形描画は自動記録できないらしいです。
私の調べた範囲では、どうやらExcel2007の仕様らしいです。
したがって、自分でマクロを組むしかないらしいのですが・・・


183 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:59:59 ]
>>182
うーん、確かにその通りだった。ごめん。
ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・

184 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:02:29 ]
連投すみません、180 ですが・・・
ちなみに"Set"を使って、次のようなのも試してみましたがだめでした。

Set MaruShape1 = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5)
MaruShape1.Fill.Visible = msoFalse
MaruShape1.Fill.Transparency = 0#
MaruShape1.Line.Weight = 0.75
MaruShape1.Line.DashStyle = msoLineSolid
MaruShape1.Line.Style = msoLineSingle
MaruShape1.Line.Transparency = 0#
MaruShape1.Line.Visible = msoTrue
MaruShape1.Line.ForeColor.SchemeColor = 64
MaruShape1.Line.BackColor.RGB = RGB(255, 255, 255)


185 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:06:15 ]
>>183
184の書き込みが、前後してすみません。
アドバイスありがとうございます。
ShapeRangeのプロパティについてヘルプを調べてみます。


186 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:31:32 ]
>>180の最終行に
Selection.ShapeRange.Fill.Visible = msoFalse
を追加してもダメですか

187 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:41:45 ]
>>186
ありがとうございます。うちのパソコンはExcel2007が入っていないので
明日、職場で確かめてみます。
ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル
では、ちんぷんかんぷんです。
正直結構まいっています。
遅くまで、付き合ってくださってありがとうございます。
明日、結果を報告します。


188 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 01:32:16 ]
うわー2007って全然違うな
うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?


189 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:10:53 ]
>>188
おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。


190 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:38:28 ]
2005と2007はどうとでもなりそうだが、
2002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。



191 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:39:16 ]
>>190
ごばくった。なんとなく話題が似てた(笑

192 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:46:11 ]
2007だとシェイプの位置がずれるんだけど、なんで?

193 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:05:11 ]
>>186
昨日のアドバイスがヒントになって解決しました。

Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#

この2行を逆にしたらOKでした。ありがとうございました。


194 名前:デフォルトの名無しさん [2007/12/30(日) 03:05:22 ]
コマンドボタンを押すと、押したコマンドボタンを消したいのです。
CommandBotton1.visible=falseでも消えません。
CommandBotton1.BackStyle=0でも消えませんでした。
どのようにすれば消す、もしくは透明にすることができるのでしょうか?
よろしくお願いします。


195 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 03:26:42 ]
>>194
Excel2000で試してみたが、
フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?


196 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 04:15:29 ]
そりゃBottonで消えるのはボットン便所ぐらいですから

197 名前:デフォルトの名無しさん [2007/12/30(日) 04:24:05 ]
>>195
これなのですが、エラーがでてしまいます。
コマンドボタンを押したら、コマンドボタンを消す。
Private Sub CommandButton1_Click()
CommandBotton1.Visible = False
End Sub

198 名前:デフォルトの名無しさん [2007/12/30(日) 04:25:09 ]
>>195
ちなみに、ワークシートのコマンドボタンです。

199 名前:デフォルトの名無しさん [2007/12/30(日) 04:35:52 ]
>>196
解決しました。ありがとうございました。

200 名前:デフォルトの名無しさん [2007/12/30(日) 11:34:38 ]
ExcelVBAで出来ないことってなにかある?
高級言語覚えたい気持ちもあるんだけど
今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな
高級言語にステップアップしていいことあるかな?



201 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 11:56:55 ]
Excelが無くても動くアプリが作れる

202 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 14:20:22 ]
VBAは高級言語だぞ。
実行がExcelに縛り付けられていることは、言語自体の話とは別。

203 名前:デフォルトの名無しさん [2007/12/30(日) 15:23:09 ]
折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。

Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?

204 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:14:47 ]
エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして
玉の発射とかの解説してるサイトって無いですか?
というか、シューティングゲーム作成の解説のサイトで良いのですが
なかなか見付からない・・・

205 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:27:53 ]
ったく、専学はパーの製造装置でしかないな

206 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:30:28 ]
>>204
学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w
素直に、マインスイーパみたいなヤツでいいと思うよ。

正直、オススメしないぞ。後で行き詰って困ることになる気がする。
ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。


207 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:42:39 ]
>>206
いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw
敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど
あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと

208 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:58:57 ]
excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが
利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。

そこで、いろいろと原因を探っているんですが、質問です。
シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか?
ご教授願います。よろしくお願いします。

209 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:07:39 ]
>>207
よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。
オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。


210 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:41:33 ]
>>209
dクス
挑戦してみる^



211 名前:デフォルトの名無しさん [2007/12/31(月) 10:27:56 ]
今日も今日とて仕事でVBA

212 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:41:25 ]
大晦日も仕事か
お疲れ様です

213 名前:デフォルトの名無しさん [2007/12/31(月) 13:33:39 ]
いい句だなぁ。

214 名前:デフォルトの名無しさん [2007/12/31(月) 15:45:45 ]
かなり微妙な手当てが出たお

215 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:20:24 ]
myPath = "C:\TEST\*.xls"
If Dir(myPath) <> "" then
Kill myPath
End If
だとDir(myPath)がオープンしっぱなしになるそうです。
どう書けば閉じるのでしょうか?

216 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 02:36:50 ]
>>215
オープンもしてないモノを、どうしろと?
意味が分かってないなら、せめて本人に書き込ませろ。
ところで、あけおめ。


217 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 03:14:41 ]
>>215
解釈1
if FileExists("hoge") then Kill "hoge"

解釈2
myPath = "C:\TEST\*.xls"
TargetPath=Dir(myPath)
Do Until TargetPath= ""
Kill TargetPath
TargetPath=Dir()
Loop

オープンは関係ないけどこのどちらかがやりたいのではないかと予想

218 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:14:44 ]
開いていないファイルに書き込みパスワードが掛かっているか
どうすれば判定できますか?

ファイルをパスワードで開いてからだったら、
If ActiveWorkbook.WriteReserved Then
とかで判定できると思うのですが、パスワードは
不明でその有無だけ判定したいのです。



219 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:52:29 ]
>>216
知らないのか?
myPath = "C:\TEST\"
Dir(myPath)
RmDir myPath
してみろ。オープンされてるから


220 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:16:33 ]
あけましておめでとうございます。
>>208についてお願いしたいのですが・・・



221 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:29:49 ]
>>219
・・・・
RmDir myPath
そのまま実行してみろ
ヘルプ読んで出直せ

222 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:32:05 ]
ポカーン

223 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:24:31 ]
>>220
ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。
保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。
これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。


224 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:45:14 ]
  1  2  3
1 10 20 30
2
------------
問題Y=1
問題X=1
回答Y=2
回答X=1

For i = 1 To 10
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) + Cells(問題Y, 問題X + 1), "問(i)")

回答X = 回答X + 1
問題X = 問題X + 1
Next
-------------
InputBoxにセル内の任意の数字(この場合"10+20")と表示させたいのですが、
上記のコードの場合、30と表示されてしまいます
セル内の数字を個別に表示させることは出来ますか?(真ん中に+などの記号を表示)
また、問1、問2と表示させていくためにはどうすれば良いのでしょうか?
この場合、問(i)で表示されてしまいます

225 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:53:20 ]
+じゃなくて、&で結合すべし。
"問(i)"は、"問("&i&")"にする

226 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:05:59 ]
>>225
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")")

にしたら出来ました^
即レスありがとうございました!

227 名前:226 mailto:sage [2008/01/01(火) 21:09:15 ]
あ、問題X+2は問題X+1でした、失礼しました

228 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:28:11 ]
>>223
そうですよね。VBAのテストをもっと増やしてみます。
ありがとうございます。

229 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 22:57:49 ]
Excel 2003でXPです。
このプログラムを実行すると

Dim commission As Integer

Sub test8()
commission = 90
If commission = 100 Then MsgBox ("手数料は100円です")
End If
End Sub

コンパイルエラー
End ifに対応するブロックがありませんというメッセージが出ます。
どこが悪いのでしょうか?

230 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 22:58:28 ]
thenでかいぎょうすべし



231 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:03:22 ]
>>230
神様ありがとう!!!

232 名前:129 mailto:sage [2008/01/02(水) 02:53:03 ]
>セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。

すみません何をどうやったらいいのか全くわかりませんorz
とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします

233 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 04:29:21 ]
そもそもVBAの経験があるのかと・・・
VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに
homepage1.nifty.com/h-fuji/excel_sample.htm

234 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:20:38 ]
VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで
お勧めは逆引きのやつとかですか?
他にいいのあります??

235 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:10:25 ]
ググれば山ほどサンプルが出てくる

236 名前:デフォルトの名無しさん [2008/01/02(水) 21:18:58 ]
かんたんプログラミング Excel 2003 これが一番良かった

237 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:27:35 ]
>>236
まじっすか!?
とりあえず見てみるわ。

>>235
図書館にも死ぬほどあったw

238 名前:かな [2008/01/03(木) 11:25:29 ]
Excelであみだくじつくりたいんやけど、どっかにサンプルないかな?
セルつかうんじゃなくてちゃんと線を引いてやりたいんや?

239 名前:デフォルトの名無しさん [2008/01/03(木) 12:43:46 ]
しね

240 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 13:59:10 ]
こんにちは。突然ですが
いろいろ試してみたんですけど
VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?



241 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:03:50 ]
全然不可能じゃないとおもうけど・・・

242 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:17:15 ]
>>240にはってこと?

243 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:30:45 ]
乱数って少数の端数が出てしまうじゃないですか。

244 名前:かな [2008/01/03(木) 15:32:36 ]
誰かおしえて?

245 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:56:29 ]
ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う

246 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:04:37 ]
少数の端数てことはないだろ。

247 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:05:53 ]
つCint

248 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:06:37 ]
0になるだろ

249 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:10:19 ]
CIntだろ

250 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:21:41 ]
すごい釣りだなw



251 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:28:39 ]
つMid(Rnd,3)

252 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:39:24 ]
Replace(Rnd,".","")

253 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:02:32 ]
Count = CInt(Rnd * N) + 1
hoge:
'ここで何かする
Count = Count - 1
If Count >= 0 Then
Goto hoge
End If


254 名前:デフォルトの名無しさん [2008/01/03(木) 18:34:00 ]
ループ中に乱数の値ってどんどん変わっていくんじゃない?

255 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 18:35:55 ]
・・・。
>>254って本気で言ってるのか?

256 名前:デフォルトの名無しさん [2008/01/03(木) 20:18:11 ]
質問です。
実際に開発する環境はXP excel 2003で
学習環境はvista excel 2007なんですが、
何か学習書を購入するとき、2007に対応したものじゃないと
理解は難しいのでしょうか?
2007に対応したVBA書はまだ少ないように感じるもので・・・


257 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:17:50 ]
確かに2007で変わった部分はある。でも基本部分(構文とかそういうの)は変わってない。
2007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。


258 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:25:11 ]
構文規則(VB部分)は変わってないけど
オブジェクトメンバ(VBA部分)は結構変わったよ

一応古いメンバにもアクセス出来るようにはなってるが
新しいメンバより動作が遅かったりというデメリットもある

2007用だと新しい体系に関しての説明が主になるだろうから
実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと

259 名前:デフォルトの名無しさん [2008/01/04(金) 06:26:50 ]
EXCEL2002でVBAを書いています。

マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。
ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか?

セルに入力しようとしている文字列
='D:\[計算書.xls]20.1月'!$J$3
  計算書.xlsの20.1月は存在しません。

下記、3つは記述済みです。
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False

260 名前:256 [2008/01/04(金) 07:26:44 ]
>>257-258
ありがとうございます。
詳しい解説があったほうがいいのでよく考えて選びます。



261 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 08:19:47 ]
>>259
うちは出ない (2000, 2003)

262 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 08:31:34 ]
>>259
どんなマクロを書いているんだ?

263 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 09:52:52 ]
>>259
再現した。 ワークシートの存在を確認するしかないかな?
  Dim s As Worksheet
  For Each s In Me.Worksheets
    If UCase(s.Name) = UCase("20.1月") Then
      s.Range("A1").Value = "='D:\[計算書.xls]20.1月'!$J$3"
      Exit For
    End If
  Next
あるいは、可能であればワークシート別のイベントで処理させるとか。


264 名前:かな [2008/01/04(金) 09:57:33 ]
だれか教えてん♪

265 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 10:43:44 ]
>>238>>244>>264
www.google.co.jp/search?q=excel+%E3%81%82%E3%81%BF%E3%81%A0%E3%81%8F%E3%81%98&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
まぁ釣りだとは思うんだけど…

266 名前:まな mailto:sage [2008/01/04(金) 10:52:16 ]
>>264
手とり足とり、組んずほぐれつ?


267 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:41:29 ]
すいません、XPでEXCEL2003です。
複数のセルに数式が入れてあるのですが、
その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。

このようなことは可能でしょうか?
もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。
後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。

268 名前:デフォルトの名無しさん [2008/01/04(金) 17:44:47 ]
>261
EXCELの設定で表示しないようにできるんですかね・・・。

>262
NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date)
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                ↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る
                          ~~~~~~
                          ↑このシートは存在しない。
『シートの選択』ダイアログが表示される・・・。

>263
やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?

269 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:53:43 ]
>>215
つOn Error

270 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:16:05 ]
>>268
NW ?



271 名前:263 mailto:sage [2008/01/05(土) 11:58:51 ]
>>268
シート作る必要があるの?
どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ?

>>270
どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・


272 名前:デフォルトの名無しさん [2008/01/07(月) 17:08:47 ]
XP、Excel2003で、改ページの枠を固定することはできるでしょうか。
この固定とは、保護等で管理者以外は触れないようにするということです。
ウィンドウの固定ではなく、改ページ範囲の固定です。

ご存知の方がいましたら、ご教授願います。

273 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 17:20:25 ]
>>272 追記です。
結合したセルがあります。
そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、
入力のみ可能とすることはできますか?

ご存知の方がいましたら、ご教授願います。

274 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:01:11 ]
対象とするアクションが起こった場合にパスワード等を求めるとかじゃだめかな?


275 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:30:12 ]
テキストボックスの余白自動設定解除に手間取った。
なんか簡単な方法ってないの?

276 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 08:29:16 ]
「手間取ってる」ではなく「手間取った」ってことは
一応目的は達成されてるわけだよね

ではそれを提示してください
コード貼ってもブックをうpしても構いません
そしたらそれより簡単な方法があれば教えましょう

それが嫌ならさようなら

277 名前:デフォルトの名無しさん [2008/01/08(火) 12:52:16 ]
散々既出ぽい話題ですが、エクセルで、
先頭の0を消さずにcsvで書き出ししたいのですが、
以下の式では当然不可能で・・・

Option Explicit
Sub eight()
Dim eight As String
Dim bigeight As String

Range("a1").Value = 8
bigeight = Range("a1").Value + 100000000
MsgBox bigeight
eight = right(bigeight, 8)
MsgBox eight
Range("A2").Value = eight
MsgBox eight
End Sub

関数で同じことをやると出来るのですがゴミデータが出て、
コンマの数が変わってしまいます。

278 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:17:17 ]
変数の型について勉強しましょう
文字列数値と数値の違いを理解しましょう
プロシージャ名と変数名を同じにするセンスを何とかしましょう



279 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 13:48:25 ]
>>277
セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)


280 名前:デフォルトの名無しさん [2008/01/08(火) 14:13:45 ]
>>279
おお。
これをVBAで指定するには?



281 名前:デフォルトの名無しさん [2008/01/08(火) 14:18:49 ]
てか、そもそもセルに転記しなければ良いのか(・∀・;)

282 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 14:53:59 ]
>>281
転記するにしても、セル(範囲)ごと持っていけば済むよ。
Range("A1").Copy Range("A2")


283 名前:デフォルトの名無しさん [2008/01/08(火) 15:06:19 ]
あ、表示形式ってマクロ記録できるんだ。
これで、解決・・・かな

284 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 15:24:41 ]
礼も言えないゆとりであった

285 名前:デフォルトの名無しさん [2008/01/08(火) 23:22:13 ]
質問なのですが、ユーザーフォームの中に80コのテキストボックスを作りたい。
プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?


286 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:45:08 ]
あります
LeftとTopを調整しましょう
コード教えては厳禁

287 名前:デフォルトの名無しさん [2008/01/08(火) 23:50:48 ]
調整とはユーザーフォームの設定ということですか?
プログラムだけで可能なのですよね?
もう少しだけヒントをお願いできないでしょうか?

288 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:55:08 ]
別にそこまで厳しくせんでも。 Excel2003ではできる。
Set ctrl = Me.Controls.Add("Forms.TextBox.1")
って感じに追加して、ctrlのプロパティを調整する。
MSFormsに追加するのに、これでいいのか?という気もするが。


289 名前:デフォルトの名無しさん [2008/01/09(水) 00:14:18 ]
できました!あとは80コスペースを空けて作る方法を考えてみます。
288さん有難う御座いました。

290 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:16:15 ]
丸投げを助長する
寄生虫が増殖する
らしいです



291 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:33:43 ]
丸投げと、できるだけズバリなヒントを欲しているのとは確実に違うと思うわけだが。


292 名前:デフォルトの名無しさん [2008/01/09(水) 14:20:42 ]
278=284=290

293 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:30:40 ]
しかし>>284には同意せざるを得ない

294 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:36:58 ]
礼なんぞいらん。邪魔。

295 名前:sage [2008/01/09(水) 14:47:15 ]
IDが無いと誰が誰かワカラン

296 名前:デフォルトの名無しさん [2008/01/09(水) 18:11:06 ]
質問です。

Dim c1 as Collection
Dim c2 as Collection
Set c1 = New Collection
c1.Add "a"
c1.Add "b"
Set c2 = c1

この次に、
c1.Remove(1) 'c1の最初のアイテムを削除
とやるとc2のアイテムも"b"だけになりますよね。

これはたぶんc2が、c1と同じCollectionオブジェクトを
指しているためなんだな、と理解しています。

理解できないのは、c1.Remove(1)ではなく、
Set c1 = Nothing
とした場合です。

c2もNothingになるのかと思いこんでいましたが、
実際c2には、"a"も"b"も、ちゃんと残っていました。
これはなぜでしょうか?




297 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:25:52 ]
a=1
b=a
a=0
にしてもb=0にならないのと同じ

298 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:27:51 ]
「変数そのもの」と「変数が指す先」の区別を理解しませう。
set c1=nothingは、変数そのものへの操作で、変数が指す先にたいしては、
ほとんど影響しない。(唯一、リファレンスカウントにだけ影響するんだっけか。)

299 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 18:29:59 ]
それはNothingキーワードが実体を解放するものではないため

300 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:41:42 ]
数値の代入式の場合は、値そのものをコピーする。
オブジェクトの代入式の場合は、値を保存してある場所(参照)をコピーする。
なので、c1の要素を消すと、c2の要素も消えるが、
Set c1 = Nothing とした場合は、c1と値そのものとの関連が削除されるが、値そのものは残ってる。
全ての参照が削除された時点で、値そのものも削除される状態になる。




301 名前:296 mailto:sage [2008/01/09(水) 20:12:40 ]
>>298
>>299
>>300
レスありがとうございました。
よくわかった、つもりです。
次のような理解でよろしいでしょうか...

Set c1 = Nothing によって、変数c1に格納された参照は削除される。
しかし参照先の実体を、まだ変数c2が参照している。
そのため、実体はメモリ上に存続する。
このあとで更に、Set c2 = Nothing とすると、
実体を指す参照がすべて無くなる。
すると、その実体が自動的に解放される。



302 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:28:25 ]
質問なんですが、
セルの値(自動で変化する)が変わった瞬間に所定のコードを実行する(JavaScriptでいうところのonchange見たいな)、
と言うのは如何すればいいんでしょうか?

303 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:40:07 ]
changeイベントを使えばいいよ

304 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:57:14 ]
>>303
dクスです
なるほど、ワークシート単位ではチェンジイベントがあるんですね。
早速やってみます。

305 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:29:04 ]
1から10000までの数字を全部掛けたときに
末尾に並ぶ0の個数を求めるのをVBAでおながいします

306 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:47:41 ]
Excelどころか言語すら関係ないアルゴリズムの話か

>>305>>2★4

307 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:51:31 ]
>>305
というか桁数が膨大になるので計算機を使っても無理かと。
代数的な解法があるんじゃないですか?数学板の質問スレに質問しては?

308 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:02:10 ]
じゃあ100まででもいいです

309 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:07:59 ]
>>307
アルゴリズム次第では桁数は膨大にならないよ
だって総桁数を調べるのではなく、0の数を数えるだけだから

なんにしろスレ違いだけど

310 名前:デフォルトの名無しさん [2008/01/10(木) 15:05:43 ]
セルのコピー、ペーストをvbaで行った後に、コピー元のセルを囲っている
網のようなラインが消えないのですが、これをvba内で
解除するにはどうすればいいでしょうか。



311 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:26:51 ]
>>310
Application.CutCopyMode = False

これはちゃんとExcel VBAの質問だな

312 名前:sage [2008/01/10(木) 15:31:47 ]
>>311
お、早速
ありがとうございます

313 名前:デフォルトの名無しさん [2008/01/10(木) 16:28:25 ]
オートフィルタを使ってデータベースの集計をしているのですが

1列目 2列目  3列目
A   B    タイトル

という風になっています。1列目と2列目は評価項目でA,B,C,D,E,Fのいずれかが記入されています
現在これをカウントしているVBAが、

3行目をオートフィルタで集計したいタイトルで搾り出す
1行目をAで抽出後、SubtotalでAの数をカウント
2行目をBで抽出後、Subtotalで…

となっています。昔はこれで十分だったのですが、次第にタイトルが増えてきて
全部やるとなると膨大な時間がかかるようになってきてしまいました。
1つのタイトルに付き単純に12回抽出→数えるとやっているので…

いちいちAで抽出→数える、Bで抽出→数える…と繰り返さずに、
タイトルで絞った後にCoutIFのようにAはいくつ、Bはいくつみたいな具合でやる方法はないでしょうか?
CountIFだと非表示のセルのA〜Fまで集計してしまって困っています

314 名前:デフォルトの名無しさん [2008/01/10(木) 16:39:34 ]
よーわからんけど..

Sub hogera_vs_mogera()
For i = 1 To 8
hoge = Range("A" & i).Value
If hoge = "A" Then hoge_counter = hoge_counter + 1
Next i
MsgBox hoge_counter
End Sub


315 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:11:37 ]
>>313
ピボットテーブルレポート使ってみて。


316 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 19:41:52 ]
セルに名前が "hoge"
とついてる場合
range("hoge").value = "ほげほげ"
と操作できますが

この名前 "hoge" の行 列の値を得る方法を
教えて下さい hogeが(1,5)なら
int row = 1
int col = 5
のように得たいです。


317 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 19:56:30 ]
Range("hoge").Row
Range("hoge").Column

318 名前:デフォルトの名無しさん [2008/01/10(木) 23:06:12 ]
質問なのですが、
Public Type SyainData
  Id As Long
  Name As String
End Type

Dim Kyo(5) as SyainData
と宣言しループ処理で関数の引数として2番目のNameを渡したいのですがどうすればいいですか?

319 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:19:01 ]
Kyo(2).Name

320 名前:デフォルトの名無しさん [2008/01/10(木) 23:23:03 ]
319さん、ByRefコンパイルエラーと表示されます。



321 名前:デフォルトの名無しさん [2008/01/10(木) 23:26:15 ]
319さん
ちなみにAユーザーフォームからNameに入力して
標準モジュールに定義してある構造体にそれぞれ格納した値をBユーザーフォームに出力したいのです。

322 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:19:38 ]
関数の呼び出し方と、関数の定義くらい書いたら? (先頭の、Sub/Function〜の行)
判断する情報が少なすぎる。


323 名前:316 mailto:sage [2008/01/11(金) 09:24:37 ]
>>317
ありがとうございました(^▽^)

324 名前:デフォルトの名無しさん [2008/01/11(金) 10:14:12 ]
VBAで実行中に「vbcritical」と共に、「400」って
数字が表示されるエラーはなんですか?

325 名前:デフォルトの名無しさん [2008/01/11(金) 14:21:13 ]
msgboxやinputboxの外観をもっと可愛くしたい!

326 名前:デフォルトの名無しさん [2008/01/11(金) 14:33:31 ]
スマン連投・・・
>>325はどうでもいいです

VBAを含むxlsを「共有」した途端に、そのvbaの挙動が微妙に変わってしまいました。
vbaの内容は、セル範囲をrangeで指定して、最下行にペーストするだけなんですが・・・。
なんか、ちょっとずれる感じなんです。ウィンドウの固定が原因かも。

共有と同時にVBAがロックされるので、原因の確かめようが無い状態(T-T

327 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:27:54 ]
質問の仕方すら何かズレてるみたいだし、しょうがないね。 そういう星の下に生まれたんだよ。


328 名前:326 [2008/01/11(金) 16:19:52 ]
共有の関係で、ペースト先の結合がバラバラになった模様・・・orz
こればっかりはどうしようもないですかね

保護されたセルに書き込むというのはvbaで何とかなりましたが・・・

329 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:48:30 ]
>>325
つAssistant

330 名前:デフォルトの名無しさん [2008/01/11(金) 18:07:53 ]
>>329
なるほど、カイル君が使えるんですね・・・
ありがとうございます



331 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 19:37:54 ]
>>328
このスレはオマイの進捗報告書かと


332 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 13:39:08 ]
winxpでExcel2003を使用しています。

VBA-Editorからの実行は正常で、ワークシート上のコマンドボタンからの実行だと
時々、Excelが強制終了します。
コードは変えていないのに、上記の状況が発生しないときもあります。

バグだと思うのですが、発生しない時もあるので、原因がつかめません。
そんな事ってありますか?

333 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 13:49:06 ]
>>332
あるよ。何か、以前にも出てたと思う。
クラスをインプリメントして、何かややこしいことしようとしてるヒトが居て、
エラーが出たり出なかったりするという話があった。基本的にはそれと同じ系統の問題では?


334 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 01:40:25 ]
winxpでExcel2003を使用しています。
以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。
1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。

Sub まとめ()
Dim i As Integer 'カウンタ変数iの宣言
Dim n As Integer 
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言
Dim MyC As Worksheet

Worksheets.Add before:=Worksheets("全国")
ActiveSheet.Name = "data"
Set MyS1= Worksheets("data")
With Worksheets("全国")
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value
End With

i=12
For Each MyC In Worksheets
If MyC.Name<> "data" Then
n = 12
MyS1.Cells(i,1)=MyC.Name
i=i+1
Do While MyC.Cells(n,2).Value<>""
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value
i=i+1
n=n+1
Loop
End If


335 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 01:45:30 ]
Sub まとめ()←死ね
Dim i As Integer 'カウンタ変数iの宣言←死ね
Dim n As Integer ←死ね
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言←死ね
Dim MyC As Worksheet←死ね
←死ね
Worksheets.Add before:=Worksheets("全国")←死ね
ActiveSheet.Name = "data"←死ね
Set MyS1= Worksheets("data")←死ね
With Worksheets("全国")←死ね
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value←死ね
End With←死ね
←死ね
i=12←死ね
For Each MyC In Worksheets←死ね
If MyC.Name<> "data" Then←死ね
n = 12←死ね
MyS1.Cells(i,1)=MyC.Name←死ね
i=i+1←死ね
Do While MyC.Cells(n,2).Value<>""←死ね
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value←死ね
i=i+1←死ね
n=n+1←死ね
Loop←死ね
End If←死ね


336 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 04:26:19 ]
こんなひどい丸投げを久しぶりに見た・・・

337 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 05:08:47 ]
replace "\n" "←死ね\n"

338 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 05:10:22 ]
>>334
随分酷いコードだな
VBA始めて3日くらいの奴が書いたコードだろ

こんな下劣なコードの説明なんてまっぴらだぜ

339 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 14:25:58 ]
ある意味、微笑ましいコードだなw  VBならでは、とでも言うか。


340 名前:334 mailto:sage [2008/01/13(日) 14:39:48 ]
わからないのなら、レスくださらなくて結構です。
わかる方のみでお願いします。



341 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 14:58:48 ]
>>340
どうもすみません・・。

342 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 15:17:23 ]
要はググれということだ

343 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 15:18:17 ]
>>340
判るんだけどさぁ、それを説明するのはスレ違いだし、そもそも野暮だろ?

344 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 15:56:32 ]
>>340は馬鹿女


345 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 16:01:13 ]
馬鹿かどうかは重要じゃない
大事なのは写真だ

346 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 16:06:19 ]
>>340
1行ずつ説明が必要とかいう時点でおかしいと思わないか?
Dim i As Integerにも説明が必要なのか?どのレベルでだ?
Dimが何を意味して、Integerが何を意味するかまで解説するのか?
あるいは内部でIntegerがどのように管理されているかまで必要か?

処理ってのはある程度の塊で説明するのが普通だろ?
「ここはクラスの平均点を計算する」みたいな感じでよ。
文法がわからないのであれば入門書買うなりググるなりすればいい。
ピンポイントなら教えてやれても全部教えろとか金取りたくなるわ。

347 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 16:07:50 ]
写真なんかはどうでもいい。
動画だ。動画をよこせ。

348 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 16:11:57 ]
クリーチャーが「あたしはできる女なのよ!」とか自己紹介してる動画とかか?

349 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 21:03:19 ]
質問ですが、組み込みダイアログボックス(例えばApplication.Dialogs(xlDialogPrint).Show)の
ウィンドウハンドルを取得するには、どうすればよろしいでしょうか?

APIを使って行うと思いますが、Excel本体やユーザーフォームのウィンドウハンドルの取得であれば
ググれば出てきたのですが、組み込みダイアログボックスのウィンドウハンドルの取得は
見つけることができなかったので、よろしくお願いします。

350 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 21:15:02 ]
Spy.exe



351 名前:デフォルトの名無しさん [2008/01/14(月) 06:14:32 ]
>>334
i=12
iに12を設定する

For Each MyC In Worksheets
MyCごとの処理です

If MyC.Name<> "data" Then
n = 12
MyC.Nameがdataと違うときは、nに12を設定する

MyS1.Cells(i,1)=MyC.Name
i=i+1
MyC.NameをMyS1 の(12,1)に設定して、iを13にする

Do While MyC.Cells(n,2).Value<>""
MyCの(12,2)が空じゃなければ、以下の処理を繰り返す

MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value
MyS1の(13,1)から(13,12)に、 MyCの(12,1)から(12,12)を設定する

i=i+1
n=n+1
Loop
iを14に、nを13にして Do Whileに戻り、
MyCの(13,2)が空じゃなければ、また処理を繰り返す
MyS1の(14,1)から(14,12)に、 MyCの(13,1)から(13,12)を設定する
その次はMyS1の(15,1)から(15,12)に、 MyCの(14,1)から(14,12)を設定する
というふうに、iとnは1ずつ大きくなり、MyCの(n,2)が空になると処理をやめる

End If

352 名前:デフォルトの名無しさん [2008/01/14(月) 07:47:13 ]
zoomtv.web.fc2.com/?&&1xbr0&0154%?&&1xbr7&0734%?&&1xbr0&0154%@ParadiseCityTV

353 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 08:10:03 ]
>>351
やさしいにもほどがあるな

354 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 09:41:33 ]
教えたがりは一種の荒らし

355 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:18:46 ]
中途半端なヤツほど、簡単な質問に答えたがる。

結局、自分自身の頭の整理をしてるんだろうな。


356 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:53:34 ]
>>353-355
君たち気持ち悪いよ。


357 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:21:53 ]
このスレ気持ち悪いよ

358 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:31:16 ]
このスレ気持ち悪いよ 

359 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:48:28 ]
このスレ気持ち悪いよ

360 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:42:05 ]
おいおいどう見ても皮肉のレスだろ
求めてる答えがあれなら質問の意味がないと思うぞ



361 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 14:04:34 ]
だれも回答しないから自分で書いたんだろうな

362 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:30:10 ]
質問スレって所で答えては駄目だと。じゃぁ、このスレの存在意義って何さ。

363 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:50:09 ]
教えたがり撲滅

364 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:58:48 ]
>>362
ごきぶりほいほい

365 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:43:59 ]
要は面倒なことはやりたくないだけだろw

366 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:43:08 ]
>>362
> 質問スレって所で
そう、ここは質問スレであって、
自社商品を購入してくれた顧客相手のサポートセンターでも
受講料を支払ってくれた生徒相手のスクールでも無い

367 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:14:23 ]
要は面倒なことはやりたくないだけだろ

368 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:15:24 ]
ここは無知な人間をののしるためのスレに決まってんじゃん

369 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:21:18 ]
昔はそれなりにレスが付いていたが、今となっては・・・ね

370 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:05:33 ]
Excel VBA回答スレが必要だな



371 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:41:49 ]
質問です。
OS: xp pro
EXCELバージョン :2003

RGB値を使いセルの塗りつぶしを行いたいと思い、
Cells(1, 1).Interior.Color = RGB(227, 229, 223)と記述しました。
しかし実際セルの色を見てみるとまったく違う色が塗られていました。
色を解析するソフトでその色のRGB値を調べてみるとRGB(204,255,204)でした。
もうわけわかりません、アドバイスお願いします。

372 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:51:12 ]
>>371
RGB(255, 0, 0)なら赤になるか?
なるならcells( i, j )にRGB( i, j, 0 )を入れたときに正しいグラデーションになるか?
RGB解析ソフトでRGB(255, 0, 0)等が正しく読み取れるか?

これくらい試してみてくれないか?

373 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 01:21:22 ]
>>372
ありがとうございます、試してみました。
RGB(255, 0, 0)なら赤になるか?→ なりました。
cells( i, j )にRGB( i, j, 0 )を入れたときに正しいグラデーションになるか?

For w_row = 1 To 256
For w_gyo = 1 To 256

ThisWorkbook.Sheets(3).Cells(w_row, w_gyo).Interior.Color = RGB(w_row, w_gyo, 0)
Next
Next
を試したところ正しいグラデーションにはなりませんでした。
参考画像です。ttp://nagamochi.info/src/up0296.jpg
ツール→オプション→色で表示したい色を追加すると表示できました。
これ以外には方法はないのでしょうか?

374 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 01:25:01 ]
>>371
エクセルは全てパレット管理。
パレットの色しか表せない。パレット以外の色をVBA等で選んでも近いパレットの色を使用させられる。
  ↓
すなわちパレットを変更すればいい

>ツール→オプション→色で表示したい色を追加すると表示できました。
>これ以外には方法はないのでしょうか?
その表示できた方法をマクロの記録で記録してやればいい。



375 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 01:46:21 ]
>>374
解決できました、ありがとうございました。

376 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 11:36:29 ]
>>351
ありがとうございました!

377 名前:334 mailto:sage [2008/01/15(火) 11:42:32 ]
>>351
そんなことを聞いているわけじゃありません、冗談は勘弁してください。

378 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 14:45:05 ]
もっと言ったれw

379 名前:デフォルトの名無しさん [2008/01/15(火) 18:52:50 ]
>>334=377

ぷっっ て、ところだけど、何をききたいのか、言ってみたら。
折れが笑ってあげるからw


380 名前:379 mailto:sage [2008/01/15(火) 20:05:12 ]
解決しました



381 名前:デフォルトの名無しさん [2008/01/15(火) 20:49:36 ]
>>380
おまい、アンカーもようつけんで、・・・www


382 名前:379 [2008/01/15(火) 20:52:47 ]
>>380
は偽者です。

383 名前:379 mailto:sage [2008/01/15(火) 21:08:38 ]
>>382
お前も偽物だろうがw

384 名前:379 mailto:sage [2008/01/15(火) 21:32:44 ]
俺は偽物ですよ

でも>>380は本物ですよ

385 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:17:42 ]
>>379
>>334=377
いいえ、等しくありません。

386 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 10:06:13 ]
>>373
どうでもいいが、RGB()関数って256を指定してもエラーにならないのか、知らなかった。

387 名前:デフォルトの名無しさん mailto:age [2008/01/16(水) 13:00:24 ]
項目とデータを含んだ2次元配列変数A,B たとえばA(30×2),B(100×2)があり、
Bの100個の項目のなかからAの項目30に該当するものをそのままAのデータに代入したい
ということを考えています。ワークシート上で行う場合はlookup関数を使えばよいのですが
マクロのままで高速に行う方法はないものでしょうか?
ワークシート関数を使ったとしても一度ワークシートにデータを書き出さなければ
つかえないのでしょうか?色々調べても分からなかったので
どなたか御教示頂けると嬉しいです。

388 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 13:26:11 ]
>>387
ん? というか、既に処理を書いてるんだったら、
VBAで処理してからワークシートに吐いた方が、そりゃ若干早いはずだと思うが。


389 名前:デフォルトの名無しさん mailto:age [2008/01/16(水) 13:46:00 ]
あ、すみません。Bの項目、データは揃っていますが、Aは項目だけで
B100個の項目の一部でAの30個の項目と重複しているものを検索、抽出して
Aの該当する項目のデータとして代入しようとしています。
ワークシートの上でやるのなら、lookup関数をつかえば良いのでしょうが
ワークシートを一切いじらずに配列の内部処理だけで同様な操作を高速に
できないかと悩んでいる次第です。


390 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 14:21:54 ]
>>389
Dim i, j As Integer
Dim AKey(30), AValue(30), BKey(100), BValue(100)

For i = 0 To 29
  For j = 0 To 99
    if AKey(i) = BKey(j) Then AValue(i) = BValue(j)
  Next j
Next i


こういう事かな?
この程度の個数ならワークシートでやってもほぼ一瞬だと思うけど。



391 名前:デフォルトの名無しさん [2008/01/16(水) 17:41:03 ]
質問。

セル[A2:C2]に英語・数学・国語の得点が入っている。合計点を計算し、
セル[D2]に入れるマクロを作成しなさい。
また、合計点が270点以上の時には「大変よくできました」、
180〜269点のときには「よくできました」、
180点未満のときには「がんばろう」というメッセージをセル[E2]に表示しなさい。

英語の得点は90点
数学の得点は85点
国語の得点は100点 とする。

よろちくね。


392 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:03:29 ]
>>391
それは質問とは言わないような・・・。


Sub Macro()
 Range("D2") = Range("A2") + Range("B2") + Range("C2")

 Select Case Range("D2")
 Case Is >= 270
  Range("E2") = "大変よくできました"
 Case Is >= 180
  Range("E2") = "よくできました"
 Case Else
  Range("E2") = "がんばろう"
 End Select
End Sub

393 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:17:08 ]
デフォルトプロパティの省略はやめましょう
少なくとも他人にコードを渡すときは

394 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:49:52 ]
2007で作ったマクロは何であんなに重くなるんだ。
一旦5.0で保存したら軽くなったんだけどまともに動かなくなるし。
これから2007が標準になっていくのかと思うと憂鬱だ。

395 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:59:19 ]
うちの会社、未だに2000使ってて、GJ!!!
自宅の自前PCも、2000のまま。サポートし続けろよ>MS


396 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 22:02:13 ]
Office 2000
メインストリーム サポート : 2004 年 6 月 30 日終了
延長サポート 期間 : 2004 年 7 月 1 日から 2009 年 7 月 14 日まで
(修正プログラム サポートには最新のサービス パックがインストールされている必要があります)

397 名前:デフォルトの名無しさん [2008/01/17(木) 10:00:49 ]
>>390 ありがとうございます。
やりたいことはそういうことなのですが、
その書き方だと要素が膨大になった時は明らかに遅くなると思います。
VBA上で高速に行う書き方などご存知ありませんでしょうか?

398 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:22:24 ]
>>397
アルゴリズム的な話なら、手法はいろいろあるが、「VBA上で高速に行う書き方」ではなく
「VB言語で高速に行う書き方」になるので、例えExcelでやるとしてもスレ違いだよ >>2★3★4

399 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 11:14:43 ]
>>397
参照される側(ここではB)をCollectionにすればO(n)なるよ。

Dim i As Integer
Dim AKey(30), AValue(30)
Dim B As New Collection

For i = 0 To 29
 AValue(i) = B.Item(AKey(i))
Next i

400 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 11:51:13 ]
各都道府県に分けられているデータをdataという名前のシートに集計するプログラムを作成したいです。
簡単に言いますと1つのシートに47個のシートを入れたいです。
よろしくお願いします




401 名前:デフォルトの名無しさん [2008/01/17(木) 12:51:36 ]
>>392 さん
ありがとうございます。

402 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:37:20 ]
>>400

>1つのシートに47個のシートを入れたいです。


意味不明
1つのブックに47個の県別シートを作りたいという意味なのか?
逆に県別に47個あるシートから1つのdataって言う名前のシートに集計したいってことなのか?
どのセルに何をどういう条件で集計するのかも書いていない。




403 名前:デフォルトの名無しさん [2008/01/17(木) 22:54:26 ]
質問です、VBA構造体配列を初期化したいのですがどうすればいいですか?
調べたのですがよくわかりませんでした。

404 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:16:07 ]
初期化用の構造体を作って代入

405 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:46:52 ]
初期化用関数作る

406 名前:デフォルトの名無しさん [2008/01/18(金) 01:31:22 ]
403です。
404.405さん以外のやり方を探しているのですがEarseの使い方やZreoMemoryの使い方がわからないです

407 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 02:43:12 ]
>Earseの使い方やZreoMemoryの使い方がわからないです
そりゃそうでしょう、そんなものありませんから。

408 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 08:27:07 ]
>>403
その辺の仕様はVB6と一緒です
つまり>>2★3★4

409 名前:デフォルトの名無しさん [2008/01/18(金) 11:59:04 ]
VBAを実行する前に、このブックが共有されているかどうか
調べて、結果を返す方法は無いでしょうか。

410 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:20:06 ]
>>409
Workbook.MultiUserEditing で調べられるけど、これはVBAだからダメってこと?




411 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:25:45 ]
VBA実行してからまたきてね♪


412 名前:デフォルトの名無しさん [2008/01/18(金) 12:31:44 ]
ありがとうございます!
いえ、multiuserediting の存在を知りませんでした・・

413 名前:397 mailto:sage [2008/01/18(金) 14:55:18 ]
>>398,>>399さん、判りました。自分でもまた試してみます。
ありがとうございました。

414 名前:デフォルトの名無しさん [2008/01/18(金) 18:11:23 ]
使えねーな

415 名前:デフォルトの名無しさん [2008/01/18(金) 19:41:23 ]
Worksheet_Changeで対応できない書式の変更にリアルタイム反応するためユーザーが入力した書式などをリアルタイム監視するプログラムを作成したところ、終了条件の問題に突き当たり処理に悩んでます。

'-----------------------------

Private EndFlg As Boolean

Sub Worksheets_Activate
EndFlg = False
Call 監視処理
End Sub

Sub Worksheets_Deactivate
EndFlg = True
End Sub

Sub 監視処理
Do
(処理)
DoEvents
Loop Until EndFlg = True
End Sub

'------------------------------

このようなものが、ほとんどのワークシートに書いてある状態です。
Loop Until EndFlg = True の直後にメッセージボックスを設け確認したところ、Worksheet_Activateのあるシートに移動するとその場では終了せず、Activateのないシートに移動した瞬間に終了します。
たとえばActivateのあるシートA、BとActivateのないシートCがある場合
A→C、B→Cは正常な終了が確認できるのですが
A→B、B→Aは終了メッセージが出ません。
A→B→A…を延々繰り返したあとにCを選択すると、終了メッセージがA⇔Bした回数に比例して複数出るため多重起動であると断定できました。

Activateのないシートをはさまずに開放する方法ありませんでしょうか。

416 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 20:16:17 ]
TextBox1の入力に応じてlistboxの内容を決め、
クリックされた項目とTextBox1の入力を考慮して
TextBox2の内容を決めるということをやろうとしています。
後述のように書こうとしました。

Private Sub TextBox1_Change()
'入力に応じてワークシートからhaniにアドレスを取り出す
以下略
With UserForm1.ListBox1
.ColumnCount = 1
.RowSource = hani.Address
End With
End Sub

Private Sub ListBox1_Click()
'先ほどの入力とリストの結果からテキスト2の内容を決める。
UserForm1.TextBox2.Value = 以下略
End Sub

このようにするとPrivate Sub TextBox1から
Private Sub ListBox1_Click()に受け渡されるのは
haniの内容だけで、それ以外の変数を渡そうとしても
上手くいかず困っています。callの構文を使えば良いのでしょうか?
色々調べてみても判らずどなたかアドヴァイス頂けると嬉しいです。

417 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:25:58 ]
初歩的ですみません。
VBAで、あるセル範囲にある数式の答えを出力するにはどうすればいいんでしょうか?

Range("A1:A5")="b2/2+b5"みたいにすると数式がそのまま出力されるし・・・

418 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:31:50 ]
>>417
それが初歩的だとわかるぐらいならじゅうぶん中級車さ

419 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:32:42 ]
>>415
ループが入れ子になってると思う。
監視処理を各シートにを書くんじゃなくて、どこか一枚に

Sub 監視処理
 Do
  if !SheetA.EndFlg(0) = False Then (処理)
  if !SheetA.EndFlg(1) = False Then (処理)
   ・・・
  DoEvents
 Loop Until 監視終了=True
End Sub

とか何とか書いて、実行しておけばいいんじゃないかな?


>>416
言ってる意味がよく判らないけど、
TextBox1_Change()内で使ってる変数を、ListBox1_Click()内でも使いたい、
と言う事なら、グローバル変数でも使えばいいんじゃないの?


>>417
Range("A1:A5") = "=b2/2+b5"

420 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:11:24 ]
>>415
DoEvents ステートメントは、ウィンドウズメッセージとイベントプロシージャの処理が終わるまで
戻ってこないから、多分、AのDeactivate⇒即座にBのActivateが走ってる状態。
ちょっと構造を見直した方がいいかもね。




421 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:14:35 ]
OS XP、Excel2003

普段は、VBエディタから 挿入 → 標準モジュール で
Module** といったファイルを作成してコードを書いています。

このModule** というファイルを自分の好きな名前にするのにはどうしたら良いのでしょうか?

422 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:25:27 ]
右クリックの名前を変更かF2でできたと思う。

423 名前:421 [2008/01/19(土) 19:16:55 ]
>>422
ご解答ありがとう御座います。
しかし、右クリックしても「名前を変更」が見つかりません。
また、F2ではオブジェクトブラウザという表示になるのですが
名前を変更する方法がわかりません。

分かる方みえましたらお願いします。

424 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:37 ]
>>423
プロパティウィンドウ→オブジェクト名を変える

425 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:23:18 ]
>>423
プロパティウィンドウの、(オブジェクト名)を変更すると変わる。


426 名前:416 mailto:sage [2008/01/19(土) 21:26:44 ]
>>419 ありがとうございます。グローバル変数にしたら解決しました。

また基本的な質問ですみませんが
マクロを起動した瞬間にリストboxに
候補を表示させようとしました

Private Sub UserForm1_initialize()
Set com1_r = Range("A1:A5")
With UserForm1.ListBox2
.ColumnCount = 1
.RowSource = com1_r.Address
End With
End Sub

のように書いても表示されません。
他のPrivate Sub TextBox1_Change()等に
書いた時は表示されるのですが
一体何が誤っているか御指摘頂けませんでしょうか?

427 名前:421 [2008/01/19(土) 21:29:38 ]
>>424
>>425
教えて頂いた方法で出来ました。
大変ありがとう御座いました。お二人に幸あれ。

428 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:56:53 ]
>>426
そのコードをそのままこちらで実行してみたけど、問題なく動いたよ。
何か別の場所でミスしてるんでは?

例えば、
値を表示させたいリストボックスのオブジェクト名が ListBox2 ではなく ListBox1 だった、とか
代入元のセル A1:A5 の値がマクロ起動時には空白だった、とか。

今一度、確認すべし。

429 名前:質問 mailto:sage [2008/01/19(土) 22:40:54 ]
Visual Basic Editerの画面で何かの拍子に下記のように
操作パネルが統合されなくなってしまいました。
どうすれば元通りにできるでしょうか?よろしくお願いします!

members.at.infoseek.co.jp/skypp/AAAAA.jpg

430 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:08:09 ]
>>428 Private Sub UserForm1_initialize()
だとgeneralになっていたので
Private Sub UserForm_initialize()
に直すとUserFormになって動きました。
作ってるのはUserForm1なのに不思議ですね。
ともかく有難うございました。



431 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:51:21 ]
>>430
画面のコントロール以外(フォーム、クラス等)のイベントプロシージャ名は、
オブジェクト名に影響されないハズなんだけどね。何でだろ?

でも、言われてみれば違和感あるよな。今気づいたw


432 名前:429 mailto:sage [2008/01/19(土) 23:52:15 ]
自己解決しました。
プロジェクトエクスプローラで「ドッキング可能」にしたら直りました。
下記にも載ってました(^^)
www2.moug.net/bbs/exvba/20071226000034.htm

433 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:52:47 ]
>>429
メニューの、ツール ⇒ オプション ⇒ [ドッキング] タブ を確認してみて。


434 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:16:46 ]
>>400
47個あるシートから1つのdataと言う名前のシートに集計したい場合は多分これです。

Sub test()
 Dim ws As Worksheet
 Dim r As Range
 Dim rr As Range

 With Worksheets("data")
      Set rr = .Range("A1")
      For Each ws In Worksheets
          If ws.Name <> .Name Then
             Set r = ws.Range("A1").CurrentRegion
             rr.Resize(r.Rows.Count, r.Columns.Count).Value = r.Value
             Set rr = rr.Offset(r.Rows.Count)
          End If
      Next
 End With
End Sub



435 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:28:12 ]
>>427
祈われるまでもなく幸ねぇよw

>>400
もうちょい詳しく書かないと失礼だぞぅ

436 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:30:46 ]
range変数で格納できる範囲はRange(Cells(1, 1), Cells(5, 4))
のような一枚のワークシート上の範囲だけでなのでしょうか?
1枚目のRange(Cells(1, 1), Cells(5, 4))と2枚目のなんたらのように
別のsheetにわたった範囲の格納などしたい場合はどうすればいいのでしょう

437 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:57:59 ]
>>436
それは無理。 クラスの概念を知らないと分からないかもしれないけど。

別々の変数に持たせるしかないと思う。もちろん、配列やコレクションは使えるはず。


438 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:46:37 ]
Excelの分析ツールを使ってランダムにサンプルを取り出して計算するシート作ったのですが
Application.ScreenUpdating = False
て書いてもサンプル取り出すたびに再計算画面が出てしまいます
画面更新しないようにするにはどうしたらいいですか?

Sub MonteSample()
Dim myMonte As Integer
Dim i As Integer
Dim myMsg As String, myTitle As String
Dim myFun As Range
Dim myAv As Long, myStd As Long, myMax As Long, myMin As Long
Dim n As Long
Dim mysouce As Range
Dim mydat As Range
Dim mydats As Range
myMsg = "計算回数を入力してください"
myTitle = "モンテカルロ・シュミレーション"
myMonte = Application.InputBox(prompt:=myMsg, Title:=myTitle, Default:=30, Type:=1)
If Range("A12") = "" Then
MsgBox "A12のセルから損益のデータを入力してください", vbOKOnly + vbExclamation
End
End If

Range("D12:D1011").Select
Selection.ClearContents
Range("K32:K100").Select
Selection.ClearContents
Range("i32:i33000").Select
Selection.ClearContents

Application.ScreenUpdating = False

439 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:48:04 ]
For i = 1 To myMonte
Range("A12").Activate
Set mydat = ActiveCell.CurrentRegion
Set mydats = mydat.Offset(1, 0).Resize(mydat.Rows.Count - 1, _
mydat.Columns.Count)
Application.Run "ATPVBAEN.XLA!Sample", mydats, _
ActiveSheet.Range("D12:D1011"), "R", 1000, False
Range("I65536").End(xlUp).Offset(1).Select
ActiveCell.Value = Range("E1011")
Range("D12:D1011").Select
Selection.ClearContents
Next i
Range("N4").Value = myMonte
Range("I31").Activate
Set myFun = ActiveCell.CurrentRegion
myFun.Offset(1, 0).Resize(myFun.Rows.Count - 1, _
myFun.Columns.Count).Select
myAv = Application.WorksheetFunction.Average(myFun)
Range("N5").Value = myAv
myStd = Application.WorksheetFunction.StDev(myFun)
Range("N6").Value = myStd
myMin = Application.WorksheetFunction.Min(myFun)
Range("N7").Value = myMin
myMax = Application.WorksheetFunction.Max(myFun)
Range("N8").Value = myMax
Range("K32").Value = myMin
Range("K33").Select

440 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:49:08 ]
For i = 1 To 49
n = ActiveCell.Offset(-1).Value
ActiveCell.Formula = Int((Abs(myMin) + myMax) / 49) + n
ActiveCell.Offset(1).Select
Next i
Range("L32:L81").Select
Selection.FormulaArray = Application.WorksheetFunction.Frequency(myFun, Range("K32:K81"))

Set mysouce = Range("L32:L81")

ActiveSheet.ChartObjects(1).Activate
ActiveChart.SetSourceData Source:=mysouce, PlotBy:=xlColumns

Application.ScreenUpdating = True

End Sub




441 名前:デフォルトの名無しさん [2008/01/20(日) 21:03:23 ]

Application.ScreenUpdating = False
Application.ScreenUpdating = True


Application.EnableCalculation = False
Application.EnableCalculation = True


442 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:22:32 ]
>>441
再計算しない場合はそんなのあるのか、ありがとう。
でも、変えてみたけど実行時エラーでてだめだった、
ワークシートで再計算してるから使えないのか
ワークシートの再計算はそのままで画面の更新だけ止めるのはできないのかな


443 名前:441 [2008/01/20(日) 22:05:30 ]
折れには、試す気もないのでわからない。
続けての回答を待っているといけないから、折れには以後書くことはないと伝えておくよ。

あと、折れが使うのは
Application.EnableEvents = False (と True)
Application.Visible = False (と True)


444 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:17:22 ]
>>443
いろいろありがと
新しいこと少し覚えられてよかったw
まあ、うまくいかなかったけど趣味で使ってるだけだから
そのうちできるようになると思うのでゆっくりやります

445 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:58:30 ]
>>442
全くためしてないんだが

Application.ScreenUpdating = 画面の更新をするか
Application.EnableCalculation = 再計算してるか

を考えれば幸せになるんじゃね?

俺的には全部コードでやっちゃうがw

446 名前:441 [2008/01/21(月) 01:01:55 ]
>>442での「実行時エラー」ってのが、気になった・・・
application.run関係ぐらいしか実行時エラーが出うる箇所はないように見えた。

もしかしたらだけど、ここが参考になるかも
 ttp://www.geocities.jp/happy_ngi/YNxv9cz56.html

おやすみ


447 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:59:57 ]
>>445
>>446
ありがとうございます。
441さんの指摘のようにapplication.runが原因みたいです
Excelの分析ツール使うと画面更新されてしまうみたいです
ワークシート上だけで乱数関数使って同じようなコードで実行したら、
画面は更新されないでうまくいきました。
鋭い指摘ありがとう!


448 名前:デフォルトの名無しさん [2008/01/21(月) 15:40:17 ]
例えば、C3からK11まで範囲指定するのに、
rangeを使わず、offsetを使って指定することは可能でしょうか。

やりたいことをイメージ化すると以下のようなのですが・・・

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2).Select, ActiveCell.Offset(10, 10).Select).Select
End Sub

449 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:58:59 ]
あのさ、
いちいちこのスレで聞くよりもさ、
自分でググるなり本を買うなりして調べた方が圧倒的に早いと思うんだけど。

450 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:09:36 ]
range("A1").select
range(selection.offset(2, 2), selection.offset(10, 10)).select
--
dim r as range
set r = range("A1")
debug.print range(r.offset(2, 2), r.offset(10, 10)).address
range(r.offset(2, 2), r.offset(10, 10)).value = 12345




451 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:10:15 ]
>>448
つか、目的がよくわかんねーよ。 あと、その例文、.Offset に .Select付いてたらエラーになるぞ。

そもそも、Offset って、基本的にRangeのプロパティなんだが。Rangeを使わずにどうしろと?


452 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:57:48 ]
If 気に入らない or わからない Then
  スルーしろ
End If

453 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:01:03 ]
意味が分かれば協力する気持ちがあるから訊いてるんだよ。全否定すんな。
それとも、どこが分からないか、こちらが分かりやすく優しく丁寧に質問しないとダメなのかよ?


454 名前:448 mailto:sage [2008/01/21(月) 17:19:29 ]
すまん!

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2), ActiveCell.Offset(10, 10)).Select
End Sub

selectとったらいけました。
逝ってくる

455 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:56:47 ]
>>453
やりたいことの「イメージ」って書いてるだろ。
これで意図がわからんというのがわからん。

456 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:42:56 ]
>>453はかわいそうな子


457 名前:451 mailto:sage [2008/01/21(月) 21:10:50 ]
>>455
レスの流れぐらい見ろよ。レスから読み取れる範囲で回答はしてる。
それとも、IDがないと同一人物かどうかも判断できんか?


458 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:47:53 ]
構造体の2次元配列の参照って
Kouzoutai(1,2).Member = 1

という形であってます?
オブジェクトが必要ですとかいうエラーが返ってくるんですが…

459 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:59:26 ]
すごいな。
もう思いついたことをとりあえず質問するスレになってるな。
>>458なんてはなっから自分で調べる気ないもんな。

460 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:46 ]
>>458
オブジェクトがないんだよ。
Dim Kouzoutai( 5, 5 ) as HOGE
って形になってるか?

どうせ
Type Kouzoutai
Member as integer
End Type
とかになってんだろ。

「VBA 構造体」でググればびっくりするくらいヒットするじゃないか。



461 名前:デフォルトの名無しさん [2008/01/22(火) 07:24:11 ]
OSはWindows XP Home Edition、
Excelは2003の11.8169.8172です。
VBA初心者でここも初めてです。質問させてください。
2種類のグラフをそれぞれ別のシート上のオブジェクトとして作成しました。
(2つ同時ではなく、まず1つ目のグラフを作り、その後別のグラフを作るというやり方です。)
2つ目のグラフを作る際、1つ目のグラフの数値軸で自動的に表示された軸の最大値と最小値を
2つ目のグラフにも反映させたい(同一の値にしたい)のですが、
どのように記述すれば1つ目のグラフの最大値や最小値を呼び出すことができますか?
With ActiveChart.Axes(xlValue)
.MinimumScale = ココと
.MaximumScale = ココです。
End With

ぜひヒントがほしいです、よろしくお願いします。

462 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 12:59:28 ]
>>461
確認する時間がないのでヒントのみ。 あとはヘルプ見ながら直して。
 Dim s As Worksheet
 Dim c As ChartObject
 Set s = Worksheets.Item("test")   ←"test" って名前のシートが取得できる
 Set c = s.ChartObjects(1)       ←取得したシートの、1つめの図を取得
あとは c.Chart.Axes.Item(xlValue).MinimumScale な感じで対応する値が取得できると思われ。
まとめて書くこともできるが、とりあえず入力補助に反応する書き方にしといた。


463 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:25:13 ]
E6からE26とN6からN26に数字を入力したのですが、このコードよりも簡単な方法はないでしょうか?


Dim c As Long
Dim f As String
Dim v1() As Variant
Dim v2() As Variant
With Excel.Range("E6:E26,N6:N26")
c = .Areas.Item(1).Count
f = "ROW(" & .Worksheet.Range("A1") _
.Resize(c).Address & ")"
v1 = .Application.Evaluate(f)
v1 = .Application.Small(.Cells, v1)
f = "ROW(" & .Worksheet.Range("A" & 1 + c) _
.Resize(.Areas.Item(2).Count).Address & ")"
v2 = .Application.Evaluate(f)
v2 = .Application.Small(.Cells, v2)
.ClearContents
.Areas.Item(1).Value = v1
.Areas.Item(2).Value = v2
End With


464 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:31:48 ]
>>463
日本語でやりたいことを書け

465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:38:05 ]
>>463 観光客の人数をExcelで作成したのですが、E6からE26とN6からN26
に観光客の人数を入力したのですが、これを小さい順に書き換えるにはどうし
たらいいのですか?


466 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:46:13 ]
つ【並べ替え(S)】


467 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:25:19 ]
「セルが特定の値以外のとき、自分の行を削除」したい。
IFでセル内容を指定してから
Range.deleteでどうやって削除条件にすべきでしょうか。

468 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:22:56 ]
な、何なんだこのスレは・・・

469 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:05:12 ]
このスレは池沼のフリして教えたがりのうざいヲタを釣るスレですが、なにか?

470 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:13:25 ]
ってことはこれは釣れたってことでFA?



471 名前:デフォルトの名無しさん [2008/01/22(火) 22:49:21 ]
>>470
お前がなw

472 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:03:33 ]
やたー☆

473 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 11:53:11 ]
やったー +1

474 名前:デフォルトの名無しさん [2008/01/23(水) 18:41:55 ]
ここで良いかどうか分かりませんが・・・

ビデオカードの現在の解像度(できればモニタのインチ数も)によって、
ActiveWindow.Zoomの値を変更するプログラムを考えているのですが、
vbaでビデオカードの現在の解像度を調べるのは不可能でしょうか?

475 名前:デフォルトの名無しさん [2008/01/23(水) 21:16:04 ]
>>474

vba api 解像度 でぐぐれば、2番目にあなたの望む回答が

476 名前:デフォルトの名無しさん [2008/01/24(木) 08:57:54 ]
良回答認定

477 名前:デフォルトの名無しさん [2008/01/24(木) 09:11:24 ]
>>475
ありがとうございます!

下調べはしてたつもりだったのですが、
甘かったです・・・orz

478 名前:デフォルトの名無しさん [2008/01/24(木) 10:01:12 ]
恥ずかしながら全く分かりません。
何卒お願い申し上げます。


次の選択肢より正しい記述をすべて選びなさい。

1:java.io.FileReaderはテキストファイルから文字を行単位で読み込むクラスである。
2:new File("bbs.txt")と記述すると、新しいファイルが作成される。
3:ファイルの操作を行う前には、Fileクラスのopenメソッドを必ず使用する。
4:BufferedReaderクラスのreadLineメソッドは、ファイルの終端までを読み込む。
5:FileクラスのisFileメソッドの戻り値がfalseだった場合は、そのファイルが無いか、またはその名がディレクトリである事を示している。


479 名前:デフォルトの名無しさん [2008/01/24(木) 10:06:39 ]
>>478です。
申し訳ありません、スレ違いでした。
失礼致しました。

480 名前:デフォルトの名無しさん [2008/01/24(木) 10:33:36 ]
アクセスのVBAのスレが見付からないのでここで質問します。
アクセスのVBAで、フォーム1
ユーザ登録画面
ユーザ名[ ]
パスワード[ ]
登録
があり、2つを入力し、登録を押したら登録できるのを教えてください



481 名前:デフォルトの名無しさん [2008/01/24(木) 10:37:07 ]
>>478です。
何度もすみません。もうこのスレに書いてしまったので、
ほかのスレに書いたら、マルチポストとか云うのに
なってしまいますので、もしよろしければこのスレで
教えて頂けないでしょうか?

482 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:04:47 ]
>>481
誤爆はマルチにはならないと思うよ。
マルチポストだって言うヤツは居るかもしれんが、普通に教えて貰えると思う。
俺も多少は分かるけど、このスレで回答したくない。回答が違ってても突っ込みがなさそうだから。


483 名前:デフォルトの名無しさん [2008/01/24(木) 11:06:44 ]
>>482さん。
ありがとうございます。
助かりました。

484 名前:デフォルトの名無しさん [2008/01/24(木) 12:07:30 ]
AutoFilterが設定されたシートで選択されたセルの行数を知るには、下記の方法で
出来る事が分かったのですが、もっと簡単な方法がありますでしょうか?

Dim r As Range, rcnt As Long
rcnt = 0
For Each r in ActiveWindow.Selection.Rows
If Not r.Hidden Then
rcnt = rcnt + 1
End If
Next


485 名前:デフォルトの名無しさん [2008/01/24(木) 17:23:24 ]
すいません、VBA超初心者です。
"地域A"というシートから魚名前を検索して個数(魚の名前の2つ下のセル)と総量(個数のセルの1つ右)の数値を
台帳(以下の記述ではシート名”漁獲量”)シートの各魚の行に転記させたいのですが、
一生懸命ヘルプやネット検索しながら自己流で記述しましたが
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
と出ます。
どなたか正しい記述をアドバイスしていただけませんでしょうか?

486 名前:485 [2008/01/24(木) 17:24:49 ]
Private Sub CommandButton1_Click()

Dim fish As String
Dim i As Integer
Dim wrkA As Integer
Dim wrkC As Range
Dim wrkB As Range

With Sheets("地域A")
wrkA = .Cells(1, Columns.Count).End(xlToLeft).Column
wrkC = .Range("A1").Resize(1, wrkA)
wrkB = .Range("A3").Resize(1, wrkA)

End With
Dim wrkD As Integer
With Sheets("漁獲量")
wrkD = .Cells(Rows.Count, 1).End(xltoUP).Row
wrkE = .UsedRange
fish = .Range(wrkD, 1).Value
End With


487 名前:485 [2008/01/24(木) 17:25:54 ]
つづきです

For i = 1 To wrkA

If fish = wrkC("wrkA,i") Then
fish = wrkB(1, i)
Cells(wrkD, 1).Offset(0, 1) = wrkB(1, i + 1)

Else
fish = " "
Cells(wrkD, 1).Offset(0, 1) = " "

Exit For
End If
Next i

End Sub

488 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 17:55:01 ]
>>485
ちょっと突っ込みどころが多すぎるので、全部回答はできないんだけど、
まだ基本を分かりきってないみたい。
とりあえず、 With Sheets("地域A")   With Sheets("漁獲量")  のトコを
Dim ws As Worksheet    ←もちろん最初(1箇所)だけ
Set ws = ThisWorkbook.Worksheets("地域A")
With ws
のような形に修正すれば、"."キーを押したときに入力補助が反応するから、
それを参考に修正するといいと思う。この入力補助が反応するようなコードってのは結構重要。
("."を押してもメソッドが出なければ、記述したところでほとんど実行時エラーになる)

あとは、.End(xltoUP) の定数は xlUp がいいのと、
fish = .Range(wrkD, 1).Value の行みたいに、Cells と Rangeの使い分けが混乱してるかな。


489 名前:485 [2008/01/24(木) 18:00:49 ]
>>488
どうもありがとうございます!!
突っ込みどころ満載ですか…笑
ご指摘を元に再度勉強してがんばってみます!!

490 名前:488 mailto:sage [2008/01/24(木) 18:30:38 ]
>>489
ゴメン、もっと重要なポイントがあった。
wrkC = .Range("A1").Resize(1, wrkA) は、オブジェクト型変数への代入になるので、
Set wrkC = .Range("A1").Resize(1, wrkA) という書式を必ずとること、です。




491 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:36:51 ]
漁獲量・・・

492 名前:デフォルトの名無しさん mailto:age [2008/01/25(金) 23:56:11 ]
すみません。vlookupのワークシート関数がうまく動きません。
普通のvlookupのようにvlookup(値、範囲、2、False)としましたが
エラーが出てしまいます。範囲がおかしそうですが
どう書き方が誤っているのかがよく判りません。
どなたか、御指摘願えませんでしょうか?

With Worksheets(2)
'Xは適当な自然数です。
For i = 1 To 100
Cells(i + 1, 2) = Application.VLookup(Cells(1, 1).Offset(i, 0).Value, .Range(Cells(2, 3), Cells(X, 4)).Address, 2, False)
Next i

493 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:11:11 ]
すみません。色々試行錯誤していたら解決しました。有難うございました

494 名前:デフォルトの名無しさん [2008/01/26(土) 17:35:21 ]
かなり高度な質問です。
Me.Controls.Add("Forms.textbox.1","品名",True)
のFormsって一体何なのですか?

495 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:48:24 ]
余りに低レベルなので泣けてきました。

496 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:52:19 ]
OLEコントロールの名称でないの。
Microsoft Forms 2.0 TextboxのPROGID

497 名前:デフォルトの名無しさん [2008/01/27(日) 13:51:07 ]
VBAの中でソルバ関数を実行しようとしてます。
その目的セルの評価値を計算する際に、さらにソルバを実行したいです。
(つまりソルバの2重ループになる感じ)

が、これを実現できなくて困っています。
考えてたのは、内側のループのソルバ部分を関数にして
ワークシートから呼び出せるようにして、
それを外側ループのソルバの目的セルの数式に放り込んでやればいい、
という方法なんですけど、
VBAのFunctionの中でソルバをまわそうとすると
シート上の値を書き換えなければならないのでエラーになってしまいます。
かといってそれをサブプロシージャにしても
ワークシート上の数式として表せないので、
結局外側のループで使えません。

何とかこれを達成する妙案はないですかね…
達成したとしても重くて不安定にはなると思うんですが、
それは承知の上です。

環境はWinXP SP2+Excel2000です


498 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:57:52 ]
↑根本的に何かを勘違いしてないか?

499 名前:デフォルトの名無しさん [2008/01/27(日) 14:03:45 ]
勘違い・・・っすか
どのへんがおかしいんでしょう?
それすらわからんです

500 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:11:32 ]
ソルバ?
ttp://www.joy.hi-ho.ne.jp/ngchsny/xevious_sol.jpg



501 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:00:39 ]
Excel2003です。
OnErrorでエラーメッセージの出力を指定しても、

エラーだとそのエラーで無事処理は終わるのですが、
本来エラーにならない場合でも、エラーメッセージ出力→正常処理 となるんですけど。

何か原因は考えられますか?
(プログラム持ち出せないのでここに書けないのです)


502 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:16:08 ]
デバッグトレースシテクダサーイ

503 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:09:18 ]
>>501
On Error で飛ぶタグの前に Exit Function を書いてなかった、とか言ったら頃すぞ?


504 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:49:26 ]
Exit Function を書いてなかった位で殺されるんじゃタマッタもんじゃない。

505 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:15:06 ]
マジレスのハズもないのに、
ネタや回答の一つも返さず、つまらんマジツッコミを入れるとは一体どういう了見か?


506 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:16:04 ]
>>504
金払って許してもらおうぜ

507 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:02:19 ]
うんこ出た
超きもちいい


508 名前:501 mailto:sage [2008/01/28(月) 12:59:32 ]
マクロの最初に

On Error Msgbox
On Error exit Sub

で、以下正常時の処理を記述しているのだが。
Exit Function書くとエラーが出る。

509 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:09:09 ]
>>508
そもそもそれコンパイル通るの?
↓なら問題ないと思うけど。

Privete Sub 処理()
 On Error GoTo ラベル
 (通常処理)
 Exit Sub

 ラベル:
 (エラー処理)
End Sub


510 名前:デフォルトの名無しさん [2008/01/28(月) 16:54:46 ]
Sub abc
Dim rng As Range
Set rng = Selection
test rng
End Sub

Function test(r As Range)
Dim c As Range
For Each c Iin r
  'cの処理
Next
End Sub

と選択範囲を引数にしてtestを呼び出しますが、testの引数rはByValにした方がいいんでしょうか?
きちんと動くには動くのですが、ちょっと不安になったもので教えてください。



511 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:48:36 ]
>>510
その程度のものを分ける必要があるか知らんが、ByValは無意味。
そこはそのまんま参照渡しが正解。
それよりFunctionは気持ち悪くないかい?
Private Sub test(r As Range)
とするのが普通だろ?
Functionって戻り値を得るものに限定した方がいいと思うが。

512 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:52:07 ]
なんだ、下はEnd Subになってるじゃん

513 名前:510 mailto:sage [2008/01/28(月) 19:47:40 ]
>>511-512
すみません、実際は最後はEnd Functionとなってます。
Functionはおかしいんですかねぇ。
それはさておき、実は某所で引数が参照型の場合、ByValが速いとかByRefは気持ち悪いとかいう方がいるんですがどうなんでしょうか?
ご存知でしたらお願いします。

514 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:22:33 ]
>>513
byrefだと参照の参照が渡されるから
確かに気持ち悪くて遅いわな。
大差ないけど。

515 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:32:01 ]
ByRef の方が遅いのか・・・。 知らなかった。
値渡し=全引数を別アドレスにコピー ⇒ 少し余分に時間が掛かる と思ってた。


516 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:40:11 ]
そのsubなりfunctionなりの内部で変更する場合のみbyrefで、
それ以外はbyvalでという方針にしておくのが良い。
(自分で定義したサイズが大きな型は別)

517 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:41:15 ]
>>514
なんか勘違いしてない?
実際にやってみたらどうよ。
ByValが速いはずねーだろ?
>>510のおかしなコードじゃ分からないだろうが、なんか戻り値のあるFunctionで試したら?

518 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:42:00 ]
>>515
やってみりゃわかるけど、byrefの方が速いよ

519 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:43:16 ]
>>514
「参照の参照」という表記が、参照がわかってない証拠。

520 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:51:52 ]
ポインタのポインタかよ



521 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:53:43 ]
&*p ← キモチワルイ

522 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:06:45 ]
俺もやってみたが何度やってもByRefが少し速いな。
Range型の引数でByValが速いケースってどういうケースだ?

523 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:27:27 ]
測定誤差

524 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:33:15 ]
うちではRangeの場合、ByRefの方がByValの2倍早かった@Excel 2007

525 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:28:34 ]
試してみたけど全然違った(Excel 2003)
もちろん、Byrefの方がかなり速い

526 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:38:42 ]
エロい方timeGetTimeで測定オナがいしますorz

527 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:41:48 ]
軽くぐぐったら、ocamlには「参照の参照」という概念があるらしい。

528 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:53:34 ]
>>526
timeGetTimeで計ったが参照私が速かった。
言っとくがtimeGetTimeだって1/1000秒の精度はないからな。

529 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:56:30 ]
渡すのは参照の方が早い。実質ポインタ(4byte)だから。
ただその分使用時に一段間接参照のコストがかかるだけ。

530 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:57:51 ]
えええ?



531 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:12 ]
そう言えばExcel総合相談所だったか、それともここだったか忘れたが、Worksheet型の引数をByValにしろなんて
意味不明なこと言ってたやつが前にいたな。彼は勘違いしてるんだろうね。

532 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:27 ]
基本的にオブジェクト型は参照渡しでいいんです
JAVAと一緒


533 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:07:39 ]
なんか思いっきり勘違いしてる人がいない?

534 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:08:44 ]
>>533
ちゃんとポイントして指摘しろ

535 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:10:19 ]
いや彼にはそのままでいて欲しいからやめとく

536 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:25:40 ]
なら最初から黙っとけよ

537 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:28:20 ]
センセー、何で一段間接参照が入るのに速くなるんでつか?

538 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:32:10 ]
ここVBAのスレだよなぁ?

539 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:37:01 ]
ByValでRangeが渡されると、内部で「Set 仮引数 = 実引数(か、それと同等の処理)」
されてるんじゃないの?
だから、使用時に間接参照のコストなんかかからないんじゃ?

540 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:45:18 ]
>>539
試せばわかる



541 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:47:58 ]
ところで514とか516とか529は試したんだろうか?

542 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:54:37 ]
ん、俺516だけど、今回は計測してないよ。
俺のは、多少遅くとも516のポリシーが良いという主張。
VB.NETも、デフォルトByValになったことだし。

543 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:59:10 ]
>>542
そっか遅いのは認めるわけね。
ByRefが遅いと書いた514はどうだろう?


544 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:00:11 ]
ここまで実計測データ無し。
Excelってベンチマークデータの公表禁止だったっけ?

545 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:05:23 ]
>>544
別に禁止じゃねーだろ?
ただみんな自分で計測して分かってると思うけどな
計測してないやつが思い込みでおかしなこと言ってるだけ

546 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:08:17 ]
>>518でFAなのに、いつまでやるつもりなんだろう・・・

547 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:10:57 ]
>>546
だよな。それ以前に>>511で終わってるわな

548 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:56:18 ]
VARIANTをC++から見ての想像。
オブジェクトをByValで渡すと、539の言う通り。オブジェクトへの参照(ポインタ)が渡される。
ByRefだとオブジェクトの変数への参照(ポインタ)が渡される。

いずれにせよ、渡されるのはポインタ値の4バイトだが、
ByValだと参照カウントの処理が要る分、コストがかかるように見える。
一方、ByRefでは2重に間接参照をしなければならないコストがあるはずなので、
測定条件によってどっちが速いかは変わってくるはず。

549 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:14:31 ]
>>548
で、どんな時に変わるのよ? 変わる”かもしれん”から一概には言えないってか?


550 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 08:23:45 ]
なんや、盛り上がってたんですねぇ。
乗り遅れたけど、実測データ書いとくね。
>>529が考えにより、ByValが有利になるように5回、引数のcにアクセスしてのr計測だからな。

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub foo()
Dim t(2) As Long, i&, j&
Dim rng As Range
Dim c As Range
Set rng = Range("A:C")
t(0) = timeGetTime
For i = 1 To rng.Count
  Set c = rng(i)
   j = TEST1(c)
Next
t(1) = timeGetTime
For i = 1 To rng.Count
  Set c = rng(i)
  j = TEST2(c)
Next
t(2) = timeGetTime
Debug.Print "TEST1", t(1) - t(0); "ミリ秒"
Debug.Print "TEST2", t(2) - t(1); "ミリ秒"
End Sub



551 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 08:24:50 ]
一般的に、ByRefの間接参照はメモリ読み込み1回が余計に掛かる。
しかし、ByValの内部コピーはメモリ読み書きがそれぞれサイズ(/4)回余計に掛かることになる。
従って、どちらが早いかは自明。

552 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 08:25:03 ]
上の続き

Private Function TEST1(c As Range) As Long
Dim i&, j&
For i = 1 To 5
   j = c.Row
Next
TEST1 = j
End Function

Private Function TEST2(ByVal c As Range) As Long
Dim i&, j&
For i = 1 To 5
  j = c.Row
Next
TEST2 = j
End Function

実測値
TEST1 2448 ミリ秒
TEST2 2528 ミリ秒
5回のループじゃなくて25回くらいならほぼ同じになった。もっと回したらやっと逆転した。
だから>>529の言うことがまったくウソということではないが、通常このように何度もアクセスすることはないから参照渡しで問題なし。
ましてや1回のアクセスに値渡しは無駄もいいとこ。1回なら割合としては上の計測よりもっと差がつく。

553 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 08:27:03 ]
モタモタしてるうちに>>551が間に入ったな。

554 名前:デフォルトの名無しさん [2008/01/29(火) 10:10:38 ]
Mougからきました。
勉強になりました。

555 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 10:51:23 ]
www2.moug.net/bbs/exvba/20080126000019.htm
私もここからきますた。
ビヒネスソフト板以外にExcelのスレがあるとは知らんかった。

556 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:41:14 ]
どうみても>>514はあの人だよなぁ。
他のオタクの人たちも既にいると見たがどうよ。

557 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:42:38 ]
あまり詮索しないように
どうやら思い違いには気がついたらしいからよかったじゃないか

558 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:58:04 ]
なんか気持ち悪い流れとコードだったので、自分で試してみた。(Excel 2000)

*ByRefとByValの違い
 それぞれ1000万回呼び出すのを5回繰り返した場合の平均:
  ByRef: 1654.8ms (A)
  ByVal: 3558.2ms (B)

*「一段の間接参照」があるかどうか
 呼び出した関数内で、次のコードを実行する。
  dim s as string
  s = arg.address (C)
 時間がかかるので、100万回の呼び出しに変更し、それを5回繰り返した場合の平均:
  ByRef: 4488ms
  ByVal: 4660ms
 100万回分の関数呼び出しのコスト(A,Bをそれぞれ10で割ったもの)を引くと、
 (C)のコストが算出される。
  ByRef: 4488-165.48 = 4322.52ms (D)
  ByVal: 4660-355.82 = 4304.18ms (E)

結論:
・ByRefの方がByValの2倍以上速い
・「一段の間接参照」なるものの存在は確認できない(D,Eより)



559 名前:550 mailto:sage [2008/01/29(火) 13:07:28 ]
気持ち悪いコードって俺の?
だったらすまんね。

560 名前:558 mailto:sage [2008/01/29(火) 13:11:53 ]
オブジェクトをByValとByRefで渡したときの違いは何か?
プロパティNameを持った空のクラスClass1を作成し、次のコードを実行してみる。

[結果]
Initialized
abc
def

[考察]
ByValでもオブジェクトのコピーが発生するわけではない。
(barから戻ったときにbarで設定したNameが表示されているので)

--Class1
Public Name as String
Private Sub Class_Initialize()
Debug.Print "Initialized"
Name = "abc"
End Sub

--Module1
Sub foo()
  Dim o As Class1
  Set o = New Class1
  bar o
  Debug.Print o.Name
End Sub

Sub bar(ByVal o As Class1)
  Debug.Print o.Name
  Set o = Nothing
End Sub




561 名前:558 mailto:sage [2008/01/29(火) 13:15:54 ]
続き。
ByValをByRefに変えて実行してみる。

[結果]
Initialized
abc
(ここで実行時エラーが発生する)

[考察]
実行時エラーが発生した行は、barから戻ってo.Nameを参照する行。
このことは、bar内でオブジェクトが破棄された、すなわちByRefは参照カウントを増やしていない
ことを意味する。

>>560の結果とあわせると、結論は、
オブジェクトをByRefで渡すと、それ自身が渡され、参照カウントも増えない。
オブジェクトをByValで渡すと、オブジェクトがコピーされるのではなく、参照カウントが増えるだけ。

562 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:16:06 ]
>ByValでもオブジェクトのコピーが発生するわけではない。
これはみんな常識として知ってるだろうね。
もちろん考察には感謝する。

563 名前:558 mailto:sage [2008/01/29(火) 13:19:10 ]
>>562のコードの訂正

Sub bar(ByVal o As Class1)
  Debug.Print o.Name
  o.Name = "def"
  Set o = Nothing
End Sub


564 名前:558 mailto:sage [2008/01/29(火) 13:26:55 ]
さて、それでは実際にオブジェクトのコピーを関数に渡したいときにはどうすればいいのだろう?
とふと思った。

Class1に次の関数を実装すれば良い。
が、VBAの機能だけで実現する方法があるかもしれない・・・。

Public Function Clone() As Class1
  Set Clone = New Class1
  Clone.Name = Me.Name
End Function

Sub foo()
Dim o As Class1
Set o = New Class1
bar o.Clone
Debug.Print o.Name
End Sub

Sub bar(ByRef o As Class1)
Debug.Print o.Name
o.Name = "def"
Set o = Nothing
End Sub

[一連の書き込み終了]

565 名前:558 mailto:sage [2008/01/29(火) 13:30:33 ]
蛇足。

オブジェクトをByValで渡す場合は、前述のようにリファレンスカウントが増えるだけであり、
仮引数のconst性(不変性)を保障するものではまったくない。

その意味で、>>516のポリシーは間違っている。

566 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:42:59 ]
しかし試しもしないで遅いとか気持ち悪いとか書くやつも相当だよな。
速度の計測なんてすぐできることだろうに。

567 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:49:29 ]
>>565
組み込みオブジェクト(というのか?)だと、ByRefで渡したときは自作クラスのインスタンスとは
ちょっと違う挙動をする。

Sub foo()
Dim r As Range
Set r = Range("A1")
bar r
Debug.Print r.Address
End Sub

Sub bar(ByRef r As Range)
Set r = Range("A2")
End Sub

ByValだと$A$1と表示され、ByRefだと$A$2と表示される。
つまり、ByValは「参照のコピー」が渡ってると言える。(ここ、怪しい表現だが)
そういう意味では>>516は正しい。

あーややこしい。

568 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:51:25 ]
いいかげんに許してやりなよ。
勘違いは誰でもあるし、反省してると思うよ。

569 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:53:00 ]
あー、それが「参照の参照」という奴なのか・・・

570 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:00:29 ]
>>555のリンク先ちらっと見たけど、とてもじゃないが読む気になれん



571 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:06:08 ]
禿げ胴

572 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:18:49 ]
なんだか混乱してきた。
ただ、byrefの方がbyvalより速いというのが事実だということは確かだよな。

573 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:23:25 ]
誰かガンダムで表現してくれ

574 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:49:38 ]
オブジェクト型はアドレス渡されるだけで
基本はLong型と同じ
byvalでも渡されるのが参照情報だからbyrefみたいに
感じちゃうってこと

575 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 15:02:19 ]
>>567
それbarの中で新しいRangeオブジェクトを作り出してるから、根本的に565が書いたコードと違う

576 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 15:07:53 ]
>>568
反省してるかねぇ。
すっとぼけてるけど、なんとかByValが遅いのは認めたらしい。
ただお行儀がどうのこうのとまだ言ってるよ。
別に参照渡しは行儀悪くねーだろ?

577 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:25:15 ]
>>576
そもそも、VBAのデフォルトがbyrefなんだから、神経質ではない普通の人が
function foo(r as range)
と書くと、それはByRefになる。

これがお行儀が悪いということは、
function foo(byval r as range)
と書くのが「お行儀が良い」ということになる。

こんな書き方がデフォルトの奴は診たこと無いぞ。

578 名前:デフォルトの名無しさん [2008/01/29(火) 16:54:08 ]
右上の×(閉じるボタン)を無効にできますか?


579 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:09:17 ]
ところで、516のいう「自分で定義したサイズが大きな型」というのが
Typeで定義した型のことなら、それに関しては同意と言おうと思ったら、
そもそもTypeのユーザ定義型は、値渡しできなかった。

580 名前:550 mailto:sage [2008/01/29(火) 17:26:39 ]
>5回のループじゃなくて25回くらいならほぼ同じになった。もっと回したらやっと逆転した。
仕事から帰って再度試したら、もっと回しても逆転まはしてなかった。スマン
測定誤差だったみたいだな。
誰かが書いてたと思うが、結局ByValが速くなるケースってなさそうだな。



581 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:43:20 ]
ChangeイベントやSelectio_ChangeイベントがByVal Target As Rangeとなってるのは何故?
エロイ人教えて

582 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:57:41 ]
差を比べるならこうする
わかるのは差は大きいが全体でみると微々たる差ということ

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub foo()
Dim t(2) As Long, i&, j&
Dim rng As Range
Dim c As Range
Set rng = Range("A:Q")
t(0) = timeGetTime
For i = 1 To rng.Count
TEST1 c
Next
t(1) = timeGetTime
For i = 1 To rng.Count
TEST2 c
Next
t(2) = timeGetTime
Debug.Print "TEST1", t(1) - t(0); "ミリ秒"
Debug.Print "TEST2", t(2) - t(1); "ミリ秒"
End Sub

Private Sub TEST1(ByRef c As Range)
End Sub

Private Sub TEST2(ByVal c As Range)
End Sub



583 名前:510 [2008/01/29(火) 18:00:36 ]
みなさん、大変参考になりました。
どうやら参照渡しで問題ないということがわかり一安心です。
ありがとうございました。

584 名前:550 mailto:sage [2008/01/29(火) 18:15:46 ]
>>582
俺はcへのアクセス速度も調べたかったんだよ。
>>529が気になったものでね。

>>583
よかったな、まぁがんがれ

585 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:40:38 ]
この流れを見て「Byrefなら速いんだ!」となんでもかんでもByrefの迷惑コーダーが量産されそうな

586 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:41:25 ]
デフォルトbyrefなんでそ?

587 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:46:43 ]
>>585
デフォルトがそうだし、仮に全部ByRef にしたトコで悪影響があるんだろうか?
要するに、関数にオブジェクト変数を渡せば、ByValにしたとこで内容の保護はできんわけだし。


588 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:56:04 ]
>>585
それは言えるかも知らんね。ByValが速いケースもあるんだけどな。
オブジェクト型はないかも知らんが、他のケースでは確実にある。

589 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:32:15 ]
>>588
だから、そのケースを示せっての。議論のネタにもならんわ。 自分がそう信じたいだけか?


590 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:37:50 ]
>>589
おめー死ねよ。
自分で探すことも出来んのか?



591 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:54:54 ]
おまえは間違ってる(でも正解を示さない)
↑ググってみて一番上ね

592 名前:デフォルト知らず [2008/01/29(火) 21:59:20 ]
折れ、今まで、全てにおいてByRefにせず、ByValできている。反省w
戻り値を親に返す必要がないから、ByValを当然に使うと考えていた。

戻り値を親に戻す必要があればByRefと、ただ単にプログラムテクニックぐらい。
で、スピードは全く気にしていなかった。

ベンチマークでなく、実用・実践のレベルでのものでも、書き換えた方が早いのだろうか? ex 与件を渡すinteger型変数5つぐらい


593 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:14:57 ]
いいから>>589は死ね。
おれはここで散々>>510のケースはByRefが速いって書いてきたからな。
勘違いするなよ。

594 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:53:02 ]
すみません
Cells(hoge, fuga).Value
で値を取り出したときに
元のセルが3だったとすると
値がそのまま3である場合と
3.0になっている場合があるようなんです
常に3であるように取り出すにはどうするのがよいでしょうか?

595 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:58:58 ]
>>593
お前が死ね。
二度と来るな。
迷惑だ。

596 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:05:50 ]
>>555
モーグは、大村なんとかが嫌いだったので見てなかったんだが、久しぶりに見に行ったら
井川はるきという気持ち悪い奴がのさばってた。

ぐぐったら、こいつ何冊も本出してるな。
掲示板で初心者相手に回答もしてるみたいだし、ほんときもちわりー

597 名前:デフォルトの名無しさん [2008/01/30(水) 07:37:28 ]
オラもモーグから来ますた。
ByRefとByValの話はもう終わり?
何かあるのかと思ったら、既出ネタの応酬とグダグダの展開に正直がっかりです。

598 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 09:35:53 ]
もともと既出ネタなのに、何を期待してたんだ?

599 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 11:02:26 ]
>>596
お前よりは役にたってるよ。
今回の引数の渡し方については、嘘をどうどうと書いたので叩かれてもしょうがないけどな。

600 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 11:13:05 ]
しかし彼の本にオブジェクト型はByValで渡すべしなんて書かれてたりしたら、本を買った人がかわいそうだな。



601 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 11:19:17 ]
>>594
そんなのありえないだろ?
元のセルが3.0という文字列なら別だが、もともと数値の3なら3だ。
どこかのセルにその値を代入すれば、表示形式によっては3だったり3.0だったりすることはあるがね。

602 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:31:31 ]
>>599
役にたってるかなんかどうでもいい。

気持ち悪いかどうかって話だ。

603 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:49:20 ]
確かにモーグは、今一番キモいコミュニティだな

604 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:05:20 ]
漏れが一番Mougでウザイのは、あのしょっちゅうハンドル変えてるやつだな。
EFCを追放された名無しだろうけど。

605 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:38:13 ]
>>514
参照の参照が渡されるから気持ち悪いというのを、もっと説明してください。

606 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:01:26 ]
>>605
Mougが下がってるから、あそこで聞けば?
もう>>514はここ見てないかもよ。

607 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:48:27 ]
「下がってる」の意味が良くわからないのですが、Mougは巡回対象ではないので、
ここで回答がなければあきらめます。

608 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:48:05 ]
もともと組み込み屋なのに転職したら最初にVBAやる羽目になってます。
VBはある程度使ってましたが忘れかけ。

質問は
ユーザ定義クラスのインスタンス(の参照?)を渡して関数の先で値を入れてもらいたいのですが、
「型が一致しません」となります。何が原因でしょうか?

【Sheet1のpublicプロシージャ】

Public Sub GetData(idx As Long, ByRef item As clsUserA)
item.Id = Me.Cells(idx + 1, 1)
item.Name = Me.Cells(idx + 1, 2)
item.Remark = Me.Cells(idx + 1, 3)
item.Visible = Me.Cells(idx + 1, 4)
End Sub

【それを呼び出すModule1のプロシージャ】
Sub Test()
Dim tmpClass As clsUserA
Dim i As Long

Set tmpClass = new clsUserA
For i = 0 to 10
Call sheetClassList.GetData(i, tmpClass) '★ここでエラー発生
Next
End Sub

よろしくお願いします・・・。

609 名前:608 mailto:sage [2008/01/30(水) 15:52:10 ]
簡単な名前にしようと思って書き換え忘れorz

Call Sheet1.GetData(i, tmpClass) '★ここでエラー発生



610 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:36:51 ]
>>608
clsUserAのプロパティでInstancingをPublicNotCreatebleに設定しろ



611 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:56:42 ]
>>610
それは違うエラーが出たので昨日の時点で直しました。

クラスをやめて構造体にしてみたら
パブリックオブジェクトモジュールで定義されてないと云々・・・

何この中途半端な言語・・・。

612 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:35:20 ]
本当に解決してほしいのなら、エラーが発生する、検証可能な最低限のコードを「全て」書け

613 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:54:48 ]
>>608
ところで、Sheet1クラスに定義したGetData( ) を
Worksheet型で宣言したオブジェクトから呼ぼうとしてるのだとしたら大笑いなんだが、
そこは大丈夫? (要するに sheetClassList の変数の型が分からないんだが)


614 名前:608 mailto:sage [2008/01/30(水) 17:55:22 ]
そのものをうpしてみた。
up01.ayame.jp/up/download/1201683170/attach/%E5%B7%A5%E7%A8%8B%E8%A1%A8.lzh
PASSは prog

開いたときの真ん前にあるCommand1を押すと問題のポイントでエラーになります。
成功すると正面の表が変化するはず。

615 名前:608 mailto:sage [2008/01/30(水) 17:57:44 ]
>>613
シートにプロシージャを定義してあって、
標準モジュールから呼んでます。
もしかして大笑いコース??

616 名前:608 mailto:sage [2008/01/30(水) 18:02:44 ]
さっき配置変更して別のシートから呼んでました。
紛らわしくてすみません。
どっちにしても動きは同じですが。

617 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:12:07 ]
>>614
再現手順を書け、アホ

とりあえず
Public Sub GetData(idx As Long, item As clsGantClass)
にしたら、コンパイルエラー(呼び出せない)のは無くなった

618 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:13:35 ]
>>608
ちょ、お前な。 ステップ実行で確認するくらいしろよ!
自分の意図してる場所のセルのデータが、ちゃんと取れてるかどうかと、
代入しようとしている構造体のメンバの変数型が合ってるかどうか。話はそれからだ。

ソース見る限りでは、Variantじゃなくて、クラスを指定しても動くと思うよ。
⇒ Public Sub GetData(idx As Long, item As clsGantClass)


619 名前:617 mailto:sage [2008/01/30(水) 19:15:01 ]
すまん、再現手順は書いてあったな。

ただ、ボタンをクリックしてもエラーは発生しないぞ?

620 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:16:21 ]
>>610が原因だったが、あれこれやってるうちに、何がなんだかわからなくなったと見た。



621 名前:608 mailto:sage [2008/01/30(水) 19:35:28 ]
エラー出ないですか・・・。
sheetClassListはどこか書き換えたんでしょうか?
いまだ動きません。

ほかのマシンで動かしてみようかなぁ

622 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:42:38 ]
Me.Cells(idx + 1, 1)がLongじゃない。
以上。


623 名前:618 mailto:sage [2008/01/30(水) 19:44:43 ]
>>621
え? ちょっと待て。何が分からないの? うpしてくれた .xls でいいんだよな?
直さなきゃいけないトコ、普通に分かるだろ。

あと、気になるのは、1度動かすと、sheetClassList.Count の値がぶっ飛ぶ。(ゼロになる)


624 名前:608 mailto:sage [2008/01/30(水) 20:04:14 ]
わかりました○| ̄|_

CellはRaw:2から読まないとだめでしたね・・・(0+1=1 "id"読んでました)
GetDataの内部の行ではなく、呼び出しの行がエラーになったために、その部分ばかりこだわってました。
ありがとうございました。精進します。

625 名前:618 mailto:sage [2008/01/30(水) 20:18:34 ]
>>624
精進してください。 ちなみに、さっきザッと眺めた限りでは、あと変数型さえ直せば動くと思うよ。


626 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:21:01 ]
おまいら釣られすぎ。
流れ変えようと>>514が質問を始めたな。
何が組み込み屋だよwww

627 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:24:29 ]
それならそれで乗ってやりゃ済む話だろ。 どんだけ粘着なんだよ。キモイやつだな。


628 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:37:18 ]
>>626
流れをぶった切って申し訳ないが無関係なんで・・・。
組み込み屋馬鹿にスンナヽ(`Д´)ノ

629 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:51:38 ]
それよりzzって相当生意気な香具師だな


630 名前:デフォルトの名無しさん [2008/01/30(水) 22:44:34 ]
質問です。
配列を一気にboolean型のtrueで初期化する方法はありますか?
Dim hairetu As booleanです



631 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:06:31 ]
OSはWindows XP、Excelは2002です。
エクセルに関しては、授業で習った程度の事しか出来ません。

エクセルのVBAでゲーム作成の課題が出て、マインスイーパを作ってみようと思ったんですが。
全てのボタンをトグルボタンで作ろうとすると、凄く重くなります。
更に一個一個のボタンにコードをいちいち打たなければならないので、
もし出来たとしてもやはり使い物にならなくなると思います。
コードをすっきりさせるやり方で、何か良い方法はありませんか?
お願いします。

632 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:45:53 ]
>>630
APIでメモリ操作
>>631
セルをボタンにみたてたら?

633 名前:デフォルトの名無しさん [2008/01/31(木) 00:11:47 ]
632さん
ネットで調べたのがよくわかりませんでした。
どーいうことなのですか?


634 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:15:10 ]
>>632
それも最初考えてみたんですが…。
マインスイーパでいう、ボタンをクリックすると文字が表示されるという動作と、
ボタンに爆弾の印を付けるという動作をさせるやり方が見つからなくて…。
セルの中の値を非表示にして、クリックなどの動作で其れを表示させるというやり方が
可能なのでしょうか?

635 名前:デフォルトの名無しさん [2008/01/31(木) 09:50:20 ]
>>634
workbookのsheetchangeでいちいち全セルのvalueを見回るようにするとか
どっちにしろ重くなるけど

636 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 10:03:14 ]
コントロール配列とかでイベントプロシージャ共有じゃだめなん?
サブクラス化して変数持たせないと呼び出し元識別できないっけ?

637 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:24:13 ]
>>635
>>636
コントロール配列が出来るなら…何とか出来るかもしれません。
どちらも自分には難しそうですが、またちょっと調べて作ってきます。
すいません、有難う御座います。

638 名前:デフォルトの名無しさん [2008/01/31(木) 21:27:29 ]
ワークシートにファイルからオブジェクトを挿入し
同時に同じファイルにハイパーリンクを設定するマクロを作っています。

ひとまずマクロの記録をして、それを元に作成しようと考えたのですが、
記録したものを実行すると2行目、3行目でエラーが出てしまいます。
(改変したものでもエラーが出ます)

2行目はオブジェクトを挿入すると"=EMBED("○○","")"という数式?が追加されるので
それを削除する工程です。

明日までには処理完了させねばならないのですが、何が問題なのか御教示下さい。

Sub Macro()

ActiveSheet.OLEObjects.Add(Filename:="C:\test.pdf", Link:=False, DisplayAsIcon:=False).Select
Selection.Formula = ""
ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:="C:\test.pdf"

End Sub


639 名前:デフォルトの名無しさん [2008/02/01(金) 11:16:45 ]
複数あるフォームのひとつを変数扱いで表示することは可能でしょうか。
下のサンプルのようなことをやりたいのですが
「オブジェクトはこのメソッドをサポートしてません」と出てしまいしまいます。
(UserForm1は勿論つくってあります)
myForm+ピリオドでShowメソッドが出てこないので、ダメなのは解っているのですが。。

Sub sump()
Dim myForm As UserForm
Set myForm = New UserForm1
myForm.Show
End Sub


640 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:48:31 ]
>>639
UserForm と UserForm1 はベツモノのクラスだよ。Control と Textbox みたいな親子関係。
変数の型を UserForm1 にしてやればおk。




641 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:07:20 ]
>>640 できました
UserForm1型があるなんて知りませんでした。
親(userform)に子(userform1)を代入、みたいに考えてました・・
ありがとうございます。

642 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:26:35 ]
>>641
フォーム型のクラスを継承するイメージかな。
当然、フォームの(オブジェクト名)を変更すると、クラス名(変数型)も変わるよ。

一旦、オブジェクトを作成してから、userform型に userform1を代入するのは間違いじゃない。
userform1、userform2・・・と型が増えたときに、userform に代入すれば、どれでも操作できる。
Control と Textbox、Label、Combobox・・・ の関係と似たようなもんだよね。


643 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:51:24 ]
>>642
639=641です
userform1型を使うのはできましたが、これだと
myform変数にuserform2を代入できないことがわかりました。(型が違うため)
このような場合どうしたらよいでしょうか。
>userform1、userform2・・・と型が増えたときに、userform に代入すれば、どれでも操作できる。
このやり方を知りたいのですが。(繰り返しですみません)

644 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 13:00:34 ]
643です
たびたびすみません、object型を使ったらできました!
これで合ってるでしょうか。

645 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:25:37 ]
>>644
↓こういう作りになってれば、少なくともエラーにはならないと思うんだけど・・・?(Excel2000)
 Dim a As UserForm1,  Dim b As UserForm2,  Dim c As UserForm
 Set a = New UserForm1
 Set b = New UserForm2
 Set c = a
 Set c = b
Object型は、なるべく使わないに越した事はないよ。ダメだという意味じゃないけど。


646 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 15:32:34 ]
>>645
やってみましたが、c.Showでエラーになってしまいます。
(メソッドをサポートしません)

647 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:08:12 ]
>>646
あー、そういう意味か。
申し訳ない、代入した後は、代入した先の変数型の持ってるメンバしか使えないよ。
Control 型に、ラベルやチェックボックスを入れても.Caption を設定できないのと同じこと。

>myForm+ピリオドでShowメソッドが出てこないので、ダメなのは解っているのですが。。
仰るとおり、Userform 型は、.Show() をサポートしていない。
異なるクラスで、共通のメソッドを呼びたいなら、Objectを使うしかないです。
あるいは、インターフェイス用のクラスを作って Implements する方法があるけど、
フォームに使うのは怖いので、特に事情が無い限りはやめた方がいいと思います。


648 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:43:27 ]
>>647
了解です、今回はobjct変数でやることにします。
(やりたいことはメッセージ代わりのフォームを打ち分けたいだけなので)
何度もお手数をとらせ申し訳ありませんでした。


649 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:54:14 ]
VBってオブジェクトと初期インスタンスの名称が同じだって所が半端な感じだよね

650 名前:デフォルトの名無しさん [2008/02/03(日) 16:39:17 ]
os:xp
excel:2003

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と自分で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
長文失礼しました!





651 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:19:53 ]
突っ込みどころが多すぎ
全部に突っ込むの面倒なので正解書いておく

Sub Search()
 Dim A As Range
 Set A = Worksheets("Sheet1").Columns("L").Find("A")
 If Not A Is Nothing Then
  A.Offset(0, 1).Value = 0
 End If
End Sub

うわ、プロシージャ宣言やEnd Ifなど、間違いようのない部分以外、全部間違ってるじゃんw

652 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:35:44 ]
notつけろの一言だけで済む話を教えたがりはこうやるわけだ

653 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:53:17 ]
>>652
not付けました

実行結果は以下の通りです┐(´ー`)┌


---------------------------
Microsoft Visual Basic
---------------------------
コンパイル エラー:

オブジェクトが必要です。
---------------------------
OK ヘルプ
---------------------------


654 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:44:54 ]
For n = 1 to 3 step 1
msgbox ("n

nを表示したい場合はmsgbox ("n
このあと何するのか分かる人いたら教えて下さい

655 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:57:25 ]
msgbox ("n")


656 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:52:03 ]
msgbox n


657 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 03:34:18 ]
("n")バーカ

658 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:38:43 ]
>>657
pc11.2ch.net/test/read.cgi/tech/1197881068/276

659 名前:デフォルトの名無しさん [2008/02/05(火) 10:49:33 ]
標準モジュールから、ユーザーフォームのテキストボックスに、
文字を表示させるにはどうすればいいでしょうか
以下では、ダメでした。

Sub test()
If Range("A1").Value = 1 Then TextBox1.Value = "ぼぼぼぼぼぼ"
End Sub

660 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 11:22:30 ]
だから、どうダメだったか位書こうぜ。
つーか、エラーメッセージくらい自力で理解しろよ。



661 名前:659 [2008/02/05(火) 11:39:17 ]
それが分かったら来ませんがな・・(´・ω・)

モジュール間で値渡し?しなければならないというのは
何となく分かるのですが、textbox1の「change」とか「enter」とか
どこに記述すればいいのかも分からず、現在に至っております。

662 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 11:49:56 ]
>>661
エラーメッセージは出ませんでしたか?
恐らく、>653のようなダイアログが出たと思うのですが。
それを見ても何も理解できないようなら人間やめた方が宜しいかと。

663 名前:659 [2008/02/05(火) 11:55:57 ]
>>662
textbox1 の変数が定義されていません と出ますね。
いちおう、フォームでtextbox1は作っているんですよ。

664 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:41:37 ]
>>663
標準モジュールに記述してるんだったら、
Range("A1").Value にしろ TextBox1.Value にしろ、未定義扱いになると思うが?
(どこに属するオブジェクトか判断できない。明示的に指定されていない。)


665 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:48:53 ]
シートから実行してしまうと、Rangeの方は未定義にならない罠。

666 名前:664 mailto:sage [2008/02/05(火) 12:55:45 ]
>>665
うを、ホントだ。素で知らんかった。Activesheetを拾うっぽいね。 どうもありがd。


667 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 13:56:32 ]
>>664
その定義方法がですね、textboxから、プロシージャをcallする場合は
分かるのですが、この逆になると、textboxのchangeなのかenterなのか
keydownなのかどこで定義したらいいのか・・・そもそも不可能なのか・・

668 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 14:10:50 ]
>>667
イベントプロシージャを使うつもりなら、どのイベントで処理するか決めるだけじゃないの?
つか、どういう動きをさせたいの?


669 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 14:11:31 ]
>>667
もしかして、フォームのプロシージャから標準モジュールをサブルーチンとして使いたいのか?
だとしたら、フォーム自身なりテキストボックス自身をそのtest()に渡してやればいい。
やりたいこととやっていることの説明くらいできないようじゃ、先が思いやられるけどね。

670 名前:デフォルトの名無しさん [2008/02/05(火) 15:14:50 ]
お付き合い頂き感謝します。
標準モジュールから、ユーザーフォームのテキストボックスを呼び出して、
なおかつそのテキストボックスに任意の文字列を表示させたいです。

テキストボックスのプロシージャから、標準モジュールを呼び出すのは
何とかできるのですが、逆がどうしても出来ません・・



671 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:18:49 ]
面倒だから、全ての自作オブジェクトの一覧と全てのプロシージャの一覧出しちゃえよ。
状況説明できない馬鹿にいくら聞いても説明しても無駄だって判ったからさ。

672 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:21:08 ]
>>670
いや、だから・・・
何かしらの処理が実現できない、っていう相談じゃなくて、コードの書き方が分からんってこと?

標準モジュールに記述したプロシージャは、どこかから呼ばれるまでは処理が走らない。
その前提の上で、特定のフォームの部品を扱いたいなら、○○(Userform名).Textbox1
例えば、デフォルトのオブジェクト名であれば、Userform1.Textbox1.Value でアクセスできる。
TextBox1.Value だけでは対象が分からんからエラーになる。 単にValue とだけ書くようなもん。


673 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:24:36 ]
うぜーーーー

Sub foo()
  UserForm1.TextBox1.Text = "abc"
  UserForm1.Show
End Sub

674 名前:672 mailto:sage [2008/02/05(火) 15:29:26 ]
>>670
あー、ごめん、よく考えたら 672の書き方じゃ絶対に分からんな。
まずはフォームの実体を取得しなきゃならんので、どこかから呼び出されるのを前提で、
”基本的には”標準モジュールのプロシージャに引数として処理対象のオブジェクトを渡すか、
フォームのインスタンスを作るトコから全て標準モジュールの処理で書かないといけない。


675 名前:デフォルトの名無しさん [2008/02/05(火) 15:39:12 ]
>>972-974
でけた^^
コードの書き方の問題なのかも分かりませんでした・・orz
ありがとうございました!

676 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:40:29 ]
感謝まで明後日の方向向いているよ。どうしようもねぇな。

677 名前:672 mailto:sage [2008/02/05(火) 15:42:12 ]
ワロタw


678 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:44:13 ]
>>674
なんか勘違いしてない?
インスタンス化はアクセスされると自動的に行われるよ?

679 名前:672 mailto:sage [2008/02/05(火) 15:55:59 ]
>>678
勘違い、つか、VBが特殊な使い方ができるだけで、
インスタンスを作ってから使うのが基本だと俺は思ってるから、自然とそういう書き方になった。
複数のインスタンスが持てないわけでもなし、何故突っ込まれるのかが分からんが。


680 名前:672 mailto:sage [2008/02/05(火) 16:00:40 ]
>>678
あ、スマン、書き込んでから言いたい事が分かった・・・。確かに、勘違いしてるように見える。
申し訳ない。




681 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:04:15 ]
少なくとも、VBA/VB6では、規定のインスタンス(暗黙のインスタンス化)を使うのが、
まぁデフォですので・・・。

682 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:16:38 ]
Windows XP + Excel 2000SP3です。

MouseWheel Fixをアドインマネージャに起動時/ロードで設定すると、VBEを開こうとすると
「インストールの準備中」のダイアログが出て先に進みません。

ただ、なぜだかその状態で一度Excelを終了させてすぐに起動すると、そのダイアログが
終了してVBEが立ち上がるようになります。

「起動時/ロード」を設定せずに、Excel起動後にロードしようとしても、やはり最初の一回は
「インストールの準備中」から先に進みません。

何か、解決法はあるでしょうか?




683 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:40:58 ]
自作のDLLをDeclareで参照して使うと、Excelを終了させないとDLLがアンロードされないみたいなんですが、
強制的にDLLをアンロードするにはどうすればいいですか?

684 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:57:04 ]
>>683
日本語訳はヘンテコなんでこっちで。

PRB: Loading and Unloading DLLs in the Design Environment
ttp://support.microsoft.com/?scid=kb%3Ben-us%3B129514&x=14&y=13

685 名前:≠683 mailto:sage [2008/02/05(火) 17:17:18 ]
つまり、Declare宣言を編集しようと試みると強制的にアンロードされるってことでいいのかな?

686 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:36:25 ]
>>685
Declareの"r"を削除して行を離れると、強制コンパイルされてDLLがアンロードされるから、
その行に戻って"r"をタイプして元通りにしろってことね。

687 名前:デフォルトの名無しさん [2008/02/05(火) 23:14:50 ]
i = 3

Do While Cells(i, 1) = "東京"
If Range(i, 10) = 1 Then
Range("i" & Columns.Count).End(xlUp).Value = st4 & st5
st1 = Range(i, 8)
st2 = Range(i, 9)

With ws2.Range("A" & Rows.Count).End(xlUp)
.Offset(0.1) = st1
.Offset(0.2) = st2

End With

i = i + 1
Loop

恐れ入ります。
A列3行目から”東京”となっている間ずっと、
もしその行の10列目が”1”であるなら”1”の一つ右の行を確認、
空白だったらST4とST5の文字列を貼り付ける。空欄でなかったらさらに一つ右の行を確認・・・(ループ)
さらにST1、ST2の文字列を貼り付け・・・
というのをループさせたいのですが、

”1”の一つ右の行を確認、空白だったらST4とST5の文字列を貼り付ける。空欄でなかったらさらに一つ右の行を確認・・・(ループ)
の部分がよく分かりません。また、実行してみてもLOOPに対するDOが無いとのエラーになってしまいます。

おばかな質問で恐縮ですが、よろしくお願いします。



688 名前:デフォルトの名無しさん [2008/02/05(火) 23:33:09 ]
i=i+1の前に end ifがいる。

689 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 06:52:49 ]
>>682
そんな現象なったことないが、原因分かんないならVectorとかで同種のソフト拾ってきて使えば?
もしくはExcelを再インストールして様子見るとか

690 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 09:48:27 ]
>>682
他のアドイン機能はちゃんと動作するのか確認して、異常がないようなら
MouseWheel Fix を一旦登録解除(クラスライブラリ)してから、再登録してみたら?




691 名前:682 mailto:sage [2008/02/06(水) 10:50:25 ]
>>689,690
コメントありがとうございます。

他のアドインは正しく動きました。また、MouseWheel Fixをregsvr32 /uして再登録してみたんですが
状況が改善しませんでした。

いろいろと検索していると、同種のアドインが見つかりましたので、それを試してみたらうまく
動作しているようなので、とりあえずはこちらを使うことにします。

AddAutoScroll for VB6/VBE6
ttp://homepage1.nifty.com/mtj-k/software/addautoscroll_vb6.html

692 名前:デフォルトの名無しさん [2008/02/06(水) 11:30:49 ]
OS vista
excel 2007

Dim i As Integer
Dim x(10), y(10) As Single
For i = 1 To 10
x(i) = i
y(i) = i
Next
Cells(1, 1).Value = Application.WorksheetFunction.LinEst(y, x)

linest関数を使いたいのですが、試しに上記のようなプログラムを作成したところ
肝心のlinest関数のところで「linestプロパティが取得できません」とエラーがでます
基礎的な間違いをしてる気がするのですが、どうかアドバイスをお願いします


693 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 11:53:18 ]
  'テキストファイルを開きます。
  Workbooks.OpenText Filename:=strFileName, _
    Origin:=xlWindows, _
    StartRow:=2, _
    DataType:=xlDelimited, _
    TextQualifier:=xlNone, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, Semicolon:=False, Space:=False, Other:=False, _
    Comma:=True, _
    FieldInfo:=Array( _
      Array(1, 2), Array(2, 1), Array(3, 2), Array(4, 2), Array(5, 2), _
      Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), _
      Array(11, 2), Array(12, 2), Array(13, 2), Array(14, 1), Array(15, 1), _
      Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 2), Array(20, 2), _
      Array(21, 2), Array(22, 2), Array(23, 2), Array(24, 2), Array(25, 2), _
      Array(26, 1), Array(27, 2), Array(28, 2), Array(29, 2), Array(30, 2), _
      Array(31, 2), Array(32, 2), Array(33, 2), Array(34, 2), Array(35, 2), _
      Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), Array(40, 2) _
    )


上記処理にてWinXP SP2 Office2003 SP3環境では問題なくシート表示するのですが、
WinXP SP2 OfficeXP (SP状態は不明です)の環境では文字化けして表示されます。
化けるフィールドとしては2バイト文字のところで、
テキストファイルとしては半角カナも全角漢字も混在のCSVで
改行コード、文字コードはCRLFのSjisです。

原因と対策がよくわからなくて困っております。
何かご存知でしたら教えていただければ、と思います。
よろしく頼みます。



694 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:28:21 ]
>>692
xの配列を渡さずに ~.LinEst(y) と書いたら動くから、パラメータの与え方が違うのかな?
スマンが使った事が無いので、識者を待つか、ヘルプを見れ。
ttp://office.microsoft.com/ja-jp/excel/HP100698381041.aspx?pid=CH100645381041


695 名前:692 [2008/02/07(木) 07:29:16 ]
すみません。
ただの宣言ミスでした。

Dim x(10) as single, y(10) As Single
としたら動きました。
>>694
どうもありがとうございます。
聞く時はもっと気を付けてからにしようと思います。


696 名前:デフォルトの名無しさん [2008/02/07(木) 12:10:10 ]

激しくスレ違いかもしれませんが、質問です。

PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。

現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。

で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。

この違いはいったいなんなのでしょうか?
 

697 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:28:40 ]
RMTでもやんのか?

どちらにしても激しくスレ違いだから帰れ。

698 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:43:46 ]
激しくスレ違いまで読んだ

699 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:06:37 ]
激しくまで読んだ

700 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:02:52 ]
sageがないので読んでない



701 名前:デフォルトの名無しさん [2008/02/09(土) 15:17:19 ]
Base64でファイル添付してメールを送りたいのですが、その方法があれば教えてください
CDO.Messageを使ってQuotedPrintableでの送信はできています

702 名前:デフォルトの名無しさん [2008/02/09(土) 15:29:15 ]
本文に追加すればいいことじゃないの

703 名前:デフォルトの名無しさん [2008/02/09(土) 15:36:00 ]
某エクセルスレで、以前に聞いたが全く回答の反応なしだったので、
ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。

皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。


704 名前:701 mailto:sage [2008/02/09(土) 16:03:05 ]
>>702
Excelでソケット通信も含めて自作しろといってるようにしか聞こえないが

705 名前:デフォルトの名無しさん [2008/02/09(土) 16:32:41 ]
某エクセルスレで、以前に聞いたが全く回答の反応なしだったので、
ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。

皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。


706 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:34:13 ]
>>704
最近のメーラは添付ファイルがアイコンなんかで表示されたりして隠蔽されて
いるけど,昔は送りたいバイナリをテキストにエンコードして文字通りメール
本文の下に貼り付けてましたよ。
↓こんなイメージ

-------ここから------------------------
encoded by なんちゃらかんちゃら
risdgfniefngoenogfaenogengopenoanongoneogneoagnoengea
fbwhibfiwbfiwbfiwbfiwbfibwibfiwbfiwbfiwbifbiwfbiwbfiw



707 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 03:48:29 ]
OS XP、Offce 2003
A1には半角英数字のみが入ってるとします。
このファイルには複数シートがあり、全シートにA1には違う文字列があります。
各A1の文字や文字数はシート毎にバラバラですが、半角英数字は変わりません。

質問としては、各シートのA1内に入っている半角大文字のみ
それぞれのシートB2に出力するのは可能?可能ならばヒントをお願いしたい
です。

708 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 08:19:57 ]
>>707
・セルA1内の文字列を取得する
・大文字があるか検索する
・文字列を組み立てる
・セルB2に設定する
・それらを全てのシートについて行なう

709 名前:デフォルトの名無しさん [2008/02/10(日) 15:33:57 ]
リテラルの中に、"(ダブルクォテーション)を含めるには、
どう書けば良いのでしょうか?



710 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 15:50:51 ]
””



711 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:07:26 ]
すいません。

A1からA4まで文章があります。

A2の横のセル(B2)にA4をカットペースト(A1A2A3は何もしない)をしたいのです。

For X = 1 TO 100 で
A 4*X+2の横のセル(B 4*X+2)にA 4*X+4をカットペースト
4*X+3 : 4*X+5 行を削除
Next i

というのをやりたいのですが、、初心者で分かりません。
特にセルのところをどうすればいいのか分かりません。教えてください。
どなたかお願いします。

712 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:11:50 ]
Cells(r, c).Value

713 名前:デフォルトの名無しさん [2008/02/10(日) 16:23:57 ]
>>704
補聴器買ったほうがいいと思うよw

714 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:36:38 ]
音は出てないから補聴器買ったところで聞こえようが無い

715 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:38:40 ]
>>713

>>704 には幻聴が聴こえるようだから精神科を薦めた方が良いのでは?

716 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:56:47 ]
そんなにいぢめてやらんでも・・・

717 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 17:02:23 ]
わかんねーから教習所に通ってんのに、お前らはなんにも教えてくれない自動車教習所の教官。
へたっぴな運転を見てからかってる。

718 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:29:04 ]
>>717
ウェ〜

719 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:47:18 ]
違うな、教習場に行けばいいのにこんな場末の練習場に来ている阿呆を見に来ている暇人だな。

720 名前:>711 mailto:sage [2008/02/10(日) 20:01:51 ]
やりたい事と合ってるかわ解らんが参考にしとくれ
行を削った後座標がズレるけど良いのか?

Sub TEST()
For I = 0 To 99
Cells(I + 4, 1).Cut Destination:=Cells(I + 2, 2)
Range(Rows(I + 3), Rows(I + 5)).Delete
Next I
End Sub



721 名前:デフォルトの名無しさん [2008/02/10(日) 21:12:35 ]
質問です。

例えば、Aの列にはデータを10〜20個入れたとして、
B1にデータ一個を入れます。
このとき、Cの列にはC1=A1-B1、C2=A2-B1・・・というように、
AのデータとB1の差を代入したいと思うのですが、簡単なやり方がわかりません。
確かコピペですいすいいけたと思うのですが・・・
ご教授お願いします。
使ってるのはXPsp1のexcel2002です。

722 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:28:24 ]
>>721
減算で。

Sub test001()
Range("A1").Resize(20).Copy Range("C1").Resize(20)
Range("B1").Copy
Range("C1").Resize(20).PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

723 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:29:34 ]
For i=startRow To endRow
Cells(i,3).Value=Cells(i,1).Value-Cells(1,2).Value
Next

つかVBAの質問なの???

724 名前:デフォルトの名無しさん [2008/02/10(日) 21:34:29 ]
>>721
C1に=A1-$B$1
C1の右下つかんで下方向にびろ〜んとする

725 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:54:21 ]
>>722>>723
すいません、理解できませんwww
>>724
ありがとうございます〜

726 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:09:59 ]
>>720
ありがとうございます。。
というか自分、何やってんだorz

727 名前:デフォルトの名無しさん [2008/02/11(月) 20:33:25 ]
プログラミングは詳しくないのですが、どなかたご助力下さい。
(質問内容)
フォルダ内で「読取パスワードが設定されいてるEXCELファイルを検索する」

どなかた該当の命令文をおしえていただけないでしょうか。

728 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:00:10 ]
DOS窓を表示させないまま、DOS窓のコマンド使って標準出力の内容が欲しい場合ってどうすればいいですか?
Execだとウィンドウ非表示にできないし、Runだと標準出力につなげないんですが

729 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:19:36 ]
>>728
FAQ

730 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:55:12 ]
ぐぐれ
コンソール プロセスを生成して標準ハンドルをリダイレクトする方法



731 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 04:04:03 ]
KB173085

732 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 07:47:07 ]
いまだにDOS窓とか使ってるやつおるんかねぇ

733 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 09:13:59 ]
>>732
GUIがないソフトがあるんで使ってる。

734 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:00 ]
DOS窓とコマンドプロンプトは別物

735 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:53 ]
と言うか、WinXPにDOS窓って存在するの?

736 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:53:06 ]
>>735
アレを、ほとんどの人はDOS窓と呼ぶのだ。

737 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:12:58 ]
二つのテキストファイルABを読み取り比較した結果を表示するマクロを作りたい。
Aに行が挿入されてBになっている場合、Aにも挿入した分だけ空白行を入れて表示したいが、いい例はないものか。

738 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:21:08 ]
つ[/usr/bin/diff]

739 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:25:56 ]
Excel VBAスレでその回答はどうだろう

740 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:33:00 ]
抽象的な質問には抽象的な回答を。



741 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:05:52 ]
W9x Wme の DOS 窓は文字通り DOS 窓って言って良いんだけど
コマンドプロンプトは DOS とは互換性がないからなぁ

742 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:08:38 ]
コマンドプロンプトってDOSのエミュレートじゃないの?
DOSプログラムは、コマンドプロンプトでは動かないの?

743 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:13 ]
DOSプログラムも動くからDOS窓でいいじゃん

744 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:41 ]
>>271
本尊乙

745 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:44:34 ]
質問です。
以下のが「スタック領域が不足しています」で通りません。
多分再帰が問題なんだろうけど、よくわかりません。
VistaのExcel2007です
If文以降に問題があると思うんですけど…

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Ein As Integer
Dim Fin As Integer
Dim Year As Integer
Dim Month As Integer

Year = Range("C2").Value
Month = Range("E2").Value

Ein = Weekday(Year & Month & "1", 1)

Cells(5, 1 + Ein) = ("1")

If Month = 2 Then
Fin = 28
Else
Fin = 31
End If

Cells(10, 10).Value = Fin
End Sub

746 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:50:08 ]
>>745
Application.EnableEvents = False
Cells(5, 1 + Ein) = ("1")

If Month = 2 Then
Fin = 28
Else
Fin = 31
End If

Cells(10, 10).Value = Fin
Application.EnableEvents = True


747 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:01:08 ]
>>746
ありがとうございますm(_ _)m
おかげさまで解決しました

748 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:04:58 ]
>>742
コマンドプロンプトは純粋なWin32プログラム。
仕様面でDOSの流れを大きく受け継いでいるけど。

コマンドプロンプトの中でDOSプログラムを動かすときには、
NTVDM (NT仮想DOSマシン)でDOS環境をこさえて、
その中でcommand.comを起動し、それから目的のプログラムを実行する。

それ以外だと直接NTVDMから始まるが後は同じ。

749 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:45:34 ]
コマンドプロンプトとDOS窓の区別が付いてないやつはVBAとマクロの区別も付いていない

間違いない

750 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:26 ]
>>727
無理せずテンポラリファイルにリダイレクトして読め



751 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:31 ]
んなもん、どーでもいい。

752 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:24:27 ]
>>738
それをEXCEL VBAでやりたい。
(UNIXでやれよ、というのは不可)

753 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:43:48 ]
>>752
行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?
判別の難しさと、それに伴う処理速度考えたら現実的じゃないと思うが。
前後データまで絡める判別はVBでは実用的じゃないし、ロジックの問題なら他スレ行け。


754 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:22:17 ]
>>752
私だったらピボットテーブル使う。
それぞれのテキストをA列に、B列にはどっちのテキストなのかわかる記号を入力しとく。後はわかるでしょ。

755 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:34:02 ]
diffのソース読めばいいよ

756 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:21:30 ]
アドバイス多謝。

>>753
>行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?

一部改変については、次の行を比較して、一致なら改変、そうじゃなければ挿入と考えるつもり。
(二行改変は考慮しない)

問題は、挿入か削除か。
そのセルを上方検索し、見つかれば削除、でなければ挿入って判断かな。

ロジックってこの板?

757 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:47:07 ]
他人を巻き込んでダラダラやらずに、diffのソース読んだほうが早いって

758 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:14:21 ]
shell c:\windows\windiff.exe

759 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:50:59 ]
つfc.exe

760 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:52:35 ]
"c:\program files\support tools\windiff.exe" /?



761 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:07:24 ]
良回答認定>>760

だがスレ違い

762 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:57:51 ]
>>758-760
神認定


と思って報告したら、
「入ってるPCと入ってないPCがある」と言われたorz

763 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:26:24 ]
winmerge

764 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:29 ]
cdiff.vbs

765 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:41:39 ]
2つのExcelファイルをdiffするのをVBAでやりたいのですが?

766 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:47:32 ]
やればぁ?

767 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:34:31 ]
やってくださいよ

768 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:25:09 ]
つc:\program files\support tools\bdiff.exe

769 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:52:16 ]
エクセルの機能にある、「Webページとして保存」ではなく

1.htmlを記述してあるシートをコピー
2.メモ帳に貼り付け、test.txtとして保存。
3.2のtest.txtをtext.htmlに名前を変更。

というような動作をVBAで自動化できるでしょうか。
もし、似たようなことが可能であれば教えてください。

770 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:58:33 ]
できるけどエクセルでやるようなこと?



771 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:05:58 ]
メモ帳を自動化するのはむずかしい

772 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:12:24 ]
セルの内容をそのままファイルに出力すればいいんじゃ?

773 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:16:09 ]
>>769
シートの内容をプレーンテキストに出力して拡張子を.htmlにしたいなら
メモ帳なんて使うまでもないが、770も言ってるとおりExcelの仕事じゃない
>>2★3,4

>>771
vbsとかで自動化するのは難しいけど
VBAというかVB言語ではSendMessage使えるから簡単だよ

774 名前:769 mailto:sage [2008/02/16(土) 19:51:14 ]
ありがとうございます。
具体的な目的を言うと、複数の条件でhtml記述を変化させている
シートがありまして、そのhtmlをブラウザでプレビューするのを
先ほどの手順でやっていたのですが、それを簡素ができないものか
と思っていたのです。
もう少し考えて見ます。


775 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:25 ]
>>772じゃ駄目な理由をまず聞こうか。

776 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:38 ]
簡単なSendMessageを使ってもらおうか

777 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:24:27 ]
教えてください!
Excel2007のOfficeボタンを非表示にする方法ってあるのでしょうか?
マイクロソフトのライブラリを見てもまだ情報がなくて……。どなたかご存知の方ご教授いただけませんでしょうか。

778 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:37:44 ]
Officeボタンとは何かというところから解説してください

779 名前:デフォルトの名無しさん [2008/02/17(日) 15:39:09 ]
OS:XP、Excel2000でワークシート関数を使用したいと思います。
引数にシート範囲ではなくVBAの配列を指定したいのですが
そのままでは出来ません。
引数に配列を指定する方法があれば、ご教授願います。

dim a(10) as long
dim b as long

b = WorksheetFunction.Max(a)

780 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:09:12 ]
>>778
「Officeボタン」とはExcel2007から追加された、いままでで言う「ファイル」メニューのようなGUIになります。
新しく追加されたGUIのため、Officeボタンのオブジェクトライブラリを操作すれば非表示にすれば良いのか、xmlを編集すれば操作できるのかどうしても判らないんです。
ご存知でしたらご教授戴けると幸いです。


>>779
動的配列のサマリを計算するメソッドのようなものがあればそれを代用すれば良いのかもしれませんが、
自分には以下のような方法でいつも計算させてしまっています。

Sub subTEST()
Dim a(10) As Long
Dim b As Long

For inCnt = LBound(a) To UBound(a)
b = WorksheetFunction.Max(a(inCnt))
Next a
End Sub






781 名前:デフォルトの名無しさん [2008/02/17(日) 19:13:16 ]
>>780
ご回答ありがとう御座います。
ただ、そのコードだとa(10)の値がbに入るだけではないでしょうか?

782 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:41:33 ]
>>780
なるほど
あいにく2003なので力にはなれません
でもApplicationクラスのどっかにCommandBarsみたいにあると思うから、
地道に探してみるしかないんじゃ

783 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:43:42 ]
zzって何者?
ヴァッカじゃねーのwww
氏ねよwww

チラシの裏でスマソ

784 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:39:11 ]
>>781
たまたま>780がmax()の仕様を知らなかっただけだろ。
どうしてもワークシート関数を使いたいなら配列を1要素ずつ処理すればいいと言う点では同意。
max()の場合なら、b = worksheetFunction.max(a(inCnt), b)とでもすれば使える。
# average()なんかはそうはいかないけど。

785 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 07:04:05 ]
関数の引数にセル位置を「A1」の形式で入れたいとき、
行を変数にはできないんでしょうか?
たとえば変数xをSUM関数につかう場合、=SUM(A1:Ax)としてもエラーになりますよね・・

786 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 08:08:49 ]
このすれ頭から読み直せ


787 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 11:53:43 ]
HYPERLINK関数で質問です。
HYPERLINK関数では、特定の文字を含むリンクは張れないのでしょうか?

現在、HYPERLINK関数を用いたシートの目次を、
マクロで作成しております。
ですが、シート名に記号を含むと参照できないようです。
(@や#などほとんどの記号は駄目ですが、
 アンダーバーだけは大丈夫なようです・・・。)

しかし、マクロではなく、編集メニューの
[挿入]→[ハイパーリンク]から同じシートを指定した場合は、
参照できるようですorz
これら2つの操作は全く別物なのかもしれませんが・・・orz

---------------------------------------------
<参照できる例>
=HYPERLINK("#シート名!A1", "シート名")

<参照できない例>
=HYPERLINK("#@シート名!A1", "@シート名")

Excelのバージョン:2002(10.2614.3311)
---------------------------------------------

参照できない例のようなシート名で、
HYPERLINK関数で参照する方法はありますでしょうか?

何かわかる方がおられましたら、ご助言ください。
よろしくお願いします。

788 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:29:39 ]
Officeボタンも知らないヤツが、質問スレで回答側に回ろうとするなよw

789 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:27:23 ]
目先の問題の回答は出来なくても質問の仕方を教えるのはできるだろ

790 名前:デフォルトの名無しさん [2008/02/21(木) 19:44:50 ]
エクセルで計算した数値は少数桁何桁精度なのでしょうか?



791 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:59:12 ]
3桁

792 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:11:40 ]
>>790
IEEE 754倍精度はある。

793 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:07:20 ]
Perlについての質問箱スレから誘導されて来ました。
Excel VBAからDOSコマンドを実行することはできますか?
具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
表示するまでを1クリックで行いたいと思っています。
環境はWindowsXP Home Edition、Excel 2003 です。
よろしくお願いします。

794 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:51:57 ]
>>793
>Excel VBAからDOSコマンドを実行することはできますか?
ちょいと命令忘れたができる。
VBAからPing送ったりbatを呼び出したりしたりもできるから間違いない。

>具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
>表示するまでを1クリックで行いたいと思っています。
上の内容を具体的にしたつもりだろうが、上ができたとしてもこちらは関係ないだろ?
PerlからExcelにイベントでも起こさせられれば可能。

795 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:06:30 ]
XPにDOSは載ってません

796 名前:793 mailto:sage [2008/02/22(金) 01:09:30 ]
>>794
ありがとうございます。では情報があることを信じて
再びgoogleの海へと漕ぎ出すことにします。
>上ができたとしてもこちらは関係ない
言われてみたらその通りでした。
いつPerlの処理が終わったかExcel側で知る必要がありますもんね。

>>795
すみません、XPではコマンドプロンプトでしたか。

797 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:46:04 ]
>>793
>>728-731

798 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:00:35 ]
active perlはどう?

799 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:22:22 ]
>>792
つまり何桁ですか?

800 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:07:05 ]
>>792
倍精度の前のIEEE 754って、何を規定した規格の番号ですか?



801 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:39:25 ]
>>800
ググれ
浮動小数点数の規格だ

802 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:55:17 ]
>>800
Excel2000辺りは倍精度だけど、2003辺りからは拡張倍精度になっているから要注意。
前者は10進数で概ね15桁、後者は10進数で概ね19桁の精度があることになる。

803 名前:693 mailto:sage [2008/02/23(土) 16:40:39 ]
解決したよ。

Origin句を定数xlWindowsから、
Shift-Jisのコードページである"932"へ変更してみたところ
文字化けなく開くことができたのでご報告。

その辺の細かな挙動の違いにだいぶ時間使いました・・・。
今後の何かの参考になれば、ということで、ひとつ。

804 名前:デフォルトの名無しさん [2008/02/23(土) 16:45:14 ]
VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。
精度をあげる方法がありましたら教えてください。

805 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:30:23 ]
寡聞にしてEWCELなるものは存じ上げませんが、VBAでやってみたということでしたら
ソースをご提示願えませんでしょうか。

806 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:44:19 ]
EXCELの前身のアプリじゃね

807 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:11:53 ]
WinXP+Office 2k7です。
ワークシート上部のいくつかのセルに任意の数値を入力するとそれに基づいて全体が計算されるシートを作りました。
B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか、というのを探すためにLoopを使ったのですが、

Dim x As Integer
x=0.1
Do
x=x+0.0001
Range("B8").Value=x
Loop Until Range("I818").Value=0

とやってもI818が0になっても普通に通り過ぎてしまいますorz
ひょっとしてワークシート上でI818が計算されるのを待たずにLoopが続いてしまうんでしょうか。。?
お知恵をお貸しください

808 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:23:28 ]
お前、小卒か?
整数って意味を知ってるか?

809 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:28:32 ]
あ、integerじゃなくてdoubleでした。
こっちに書くとき間違えた\(^o^)/

810 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:33:09 ]
> B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか
自分でマクロ書かなくても、それはExcelのゴールシークを使えばいいのではないかと思う。



811 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:36:45 ]
>>810
うは・・・全然知りませんでした('A`)
お手数おかけしました。ありがとうございます

812 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:00:13 ]
すれ違いでしたら誘導お願いします。
「マクロを有効化する」を出さずfor文相当の機能を実現しようと思ってます。
直接forは使えないので、富豪的にセルのマスを記憶装置にする方針です。

やりたいことは、以下の状況で
「列Bが「新」の行の数値を抜き出して
それをコンマで連結して指定のセル(例えばD100)に入れる」です。
 列A 数値(1ずつ増えていく)
 列B 「新」「旧」のどちらかの文字

一旦、以下の式をC列に入れて、ドラッグでオートフィルします。
=if(B1="新",A1,"")
これはうまく行き、C列には「新規」の行のみに数値が表示されます。
次に、D列の先頭にC1の値を入れます(forの初期条件)
次に「同じ行のC列に値があれば、一つ上のD列の値をコンマで連結」
  「同じ行のC列に値がなければ、一つ上のD列の値をそのまま表示」
をforのステップ条件としてD2にかき、D100へオートフィルしようとしたのですが
=CStr(D1) & "," & CStr(C2)やCStr(val(D1)) & ..といった式ではうまくいきません。
アドバイス頂けないでしょうか

以上長文失礼しました。

813 名前:812 mailto:sage [2008/02/24(日) 11:03:55 ]
↑訂正「新規」ではなく「新」ですね

814 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:37:49 ]
Vlookupじゃね?

815 名前:デフォルトの名無しさん [2008/02/24(日) 12:12:23 ]
>>804

> VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。
log関数は数値が小さいと精度は悪くなる。
少し値が変わると急激に値がかわるからな。    
自分で精度のよい関数を作るのがよい。
級数展開とかやれば作れる。

>>805-806
おまえら厨房だな。

816 名前:デフォルトの名無しさん [2008/02/24(日) 13:44:03 ]
質問なのですが適当な大きさのユーザーフォームを作成してフォームの中にラベルや
ボタンを設置します。設置したラベルやボタンが常にフォーム幅の真ん中に設置
させる方法はありますでしょうか?フォームの大きさを後で変更しても真中に自動で
なるようにしたいです。

817 名前:812 mailto:sage [2008/02/24(日) 15:25:46 ]
>>814
それだとコンマをくっつけることができませんでした。
しかし、結局、こんな感じで解決しました
if(C2<>"",concatenate(D1,",",text(C2,"#")),D1)


818 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:05:38 ]
>>816
算数レベルで処理


819 名前:800 mailto:sage [2008/02/24(日) 22:00:00 ]
>>802
Thanks。概ねという留保付けは、このせいですか?
Excel で浮動小数点演算の結果が正しくない場合がある 2007年3月19日
support.microsoft.com/kb/78113/ja

820 名前:デフォルトの名無しさん [2008/02/24(日) 22:38:32 ]
816さんどーゆうことですか?




821 名前:802 mailto:sage [2008/02/24(日) 22:49:22 ]
あーそうそう、そこの精度の欄にある、暗黙と仮数を足した53ビットを10進で表わすと概ね15桁ってこと。
つまり、log2(2^53)≒15.95=15~16桁。

822 名前:デフォルトの名無しさん [2008/02/25(月) 10:04:55 ]
教えていただきたいのですが、エクセルで、Aの列に任意のセルのカーソルが
ある場合のみ(B列やC列ではプログラム自体が稼動しなくしたいのですが)
FANCTIONを実行したいのですが、うまくいきません。
どうしたらうまくうごくのでしょか?


823 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:18:34 ]
>>822
もうちょっと分かるように説明しる。あと、どんなFUNCTIONよ?
ボタン押したときに、カーソルが特定の列にある場合にのみ処理を有効にしたいってことか?


824 名前:デフォルトの名無しさん [2008/02/25(月) 11:38:48 ]
822です。
>カーソルが特定の列にある場合にのみ処理
まさにこの事です。エクセルの行列のデーター
をVBで計算させてるのですが、キーの列をA列にして
そこからActiveCell.Offset(0, x)とActiveCell.Offset(0, x+1)
を足してActiveCell.Offset(0, x+2)へ答えを出しなさいとしてるのですが、
いかんせん、キーにしているA列以外にセルがある場合も実行していまうので
ActiveCell.Offset(0, x+2)の書き込みたいところデーターのあるActiveCell.Offset(0, x+3)
とかに上書きしていまうので、何とかしたいのです。FANCTIONは
ActiveCell.Offset(0, x+3)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+2)
を変数にしたものです。


825 名前:デフォルトの名無しさん [2008/02/25(月) 11:42:10 ]
すいません。間違いました。FANCTIONは
ActiveCell.Offset(0, x+2)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+1)
を変数にしたものです。
です。




826 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:17:05 ]
>>825
単にFANCTIONとやらの先頭で、ActiveCellがA列じゃなければ終わればいいだけじゃね?

827 名前:825 [2008/02/25(月) 12:58:53 ]
ActiveCellがA列じゃなければが、
書けないのです・・・


828 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:12:22 ]
そもそも>824のxはどこから出てきたのか知らんが、
offsetプロパティに辿り着けるくらいならcolumnプロパティくらい見つけられるだろ。
試しにmsgbox activecell.columnして味噌。


829 名前:825 [2008/02/25(月) 14:11:10 ]
If ActiveCell.Column = 1 Then で出来ました!
828さん ありがとうございます。
感謝 感謝!


830 名前:デフォルトの名無しさん [2008/02/25(月) 15:57:11 ]
基本的な質問でスミマセン!
ワークシートに新しい埋め込みグラフを作成(Addメソッドによる)したいのですが

Dim co As ChartObject
Set co = Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100)

は正常に動くんですが

Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100)

は、構文エラーになります。なんで?
わざわざ変数に格納しないと、機能しないのはなぜなのでしょうか?
詳しい人おられましたらご教授いただけないでしょうか?



831 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:00:26 ]
そういう構文だからだろ。疑問を持つところじゃない。

832 名前:デフォルトの名無しさん [2008/02/25(月) 17:16:37 ]
Rng AS Range
Rng1 AS Range
Rng2 AS Range

Rng=Range("A1:G10")

このRngから一番右の範囲をRng1に入れたい。
またRngから一番右の列を除いた範囲をRng2に入れたい。

どのようにすればよいでしょうか?

833 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:32:27 ]
union

834 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:45:36 ]
>>830
Callステートメント

835 名前:デフォルトの名無しさん [2008/02/25(月) 18:49:27 ]
>>832

Rng1=Rng.Resize(Rng.Row.Count-1,Rng.Columns.Count).offset(1,0)
Rng2=Rng.Resize(1,Rng.Columns.Count).offset(1,0)

836 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:51:26 ]
>>830
Worksheets("sheet1").ChartObjects.Add 50, 40, 200, 100

837 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:07:06 ]
ところで君たちは未だにVB独特のハンガリアン記法を守っているのかい?
今度VBAをメンテすることになって読みにくいなあと思ってるんだが・・・。


838 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:21:31 ]
なんでExcelでシステムハンガリアン使うん?

839 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:40:24 ]
>>835
はぁ?

>>832
Set Rng1 = Rng.Columns(Rng.Columns.Count)
Set Rng2 = Rng.Resize(, Rng.Columns.Count - 1)

840 名前:デフォルトの名無しさん [2008/02/25(月) 23:55:21 ]
質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?



841 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:00:18 ]
任意のxisファイルを2個各シートに読み込みたいのですが
どうやってもできません・・・
ファイルの読み込みってどうやればいいのでしょうか?

842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:17:49 ]
>>841
ブックを開いておいて、シートを移動すれば医院で内科医。

843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:27:13 ]
vbaを使用してRS232cで計測するはめになったんですが、エクセルのvbaはvb6のようなタイマがないので、
擬似的なタイマを作成するときに、何か注意点とか欠点教えてください

844 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:28:18 ]
ご愁傷様。

845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:30:47 ]
>>842
VBAでボタンでファイルを選択って出したいのです!
でも参照とか選択ってBOXの出し方すら分かりません・・・

846 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:56:58 ]
>>845
ファイルを開くダイアログ
ttp://www.serpress.co.jp/excel/vba030.html

847 名前:デフォルトの名無しさん [2008/02/26(火) 01:14:15 ]
質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?

848 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:15:58 ]
>>846
おお、これでBOX造れるんですね!どうも!
またちょっと頑張ってみます

849 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:10:38 ]
>>847

こういう事?

Private Sub UserForm_Initialize()

Application.Visible = False
UserForm1.Show

End Sub

850 名前:デフォルトの名無しさん [2008/02/26(火) 08:29:10 ]
Dim a As Integer
a = Count("a1:a4")
For i = 1 To a
Beep
Next i

シートのデーター数だけ繰り返し処理したいのですが
a = Count("a1:a4")ここんとこがエラーになってしまいます。
どう処理したらいいのでしょう?






851 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:43:24 ]
a = WorksheetFunction.Count(Range("a1:a4"))
でどう?
試してないけど。

852 名前:デフォルトの名無しさん [2008/02/26(火) 16:50:49 ]
851さん 850です。動きましたありがとうございました。


853 名前:デフォルトの名無しさん [2008/02/26(火) 19:00:35 ]
Renge(RefEdit1.Value)と使いたいのですが
RefEdit1.Valueを『セル範囲』かどうか調べる方法はありますでしょうか?
よろしくお願いします。

854 名前:デフォルトの名無しさん [2008/02/26(火) 20:10:29 ]
フォームから入力するVBAを作成しました。
プログラムを走らせ、フォームがでますが、
何も入力せずに放置するとFrame内だけが白くなります。
改善する方法はありますでしょうか?

855 名前:デフォルトの名無しさん [2008/02/26(火) 21:57:03 ]
830です。
>>834 さん
なるほど!。値を渡す構文になってしまっていたのですね!
>>836 さん
本当だ!動きました。ありがとうございました。
834さん。836さん。お陰様で疑問が解決しました。感謝!感謝!


856 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:29:04 ]
>>854
気にすると体に毒だぞ

857 名前:デフォルトの名無しさん [2008/02/27(水) 09:51:07 ]
>>856
つまり対策はないと?

858 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:52:18 ]
モニタの色温度を変えると白を赤っぽく変えたりできるよ

859 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:33:00 ]
>>857
俺ら低レベルではわからないんだよ。

860 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:33:21 ]
>>854
再現する最低限の構成で、ブックもしくはユーザーフォームモジュールをうp
情報全く無しじゃ、さすがに改善法どころか改善可能か否かすらもわからんわな



861 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:22:06 ]
俺らはそれだけVBAをさわってないってことさ。


862 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:26:29 ]
現実の出来事かどうかすらあやしい

863 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 05:23:21 ]
他のフォームでも同じ現象になるのか検証したの?

864 名前:デフォルトの名無しさん [2008/03/01(土) 04:27:20 ]
エクセルで作った表を画像として保存するマクロってありますかねぇ?

865 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:55:31 ]
>>864
VBAの範囲だけじゃ無理だけど実現可能

866 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:15:23 ]
>>864
(っ´▽`)っ
暇なので作ってみたよ☆

Option Explicit

Private Declare Function GetVersionExA Lib "KERNEL32.DLL" ( _
  ByRef pVersionInfo As OSVERSIONINFO _
) As Integer
Private Declare Sub keybd_event Lib "USER32.DLL" ( _
  ByVal bVk As Long, _
  ByVal bScan As Long, _
  ByVal dwFlags As Long, _
  ByVal dwExtraInfo As Long _
)
Private Const VK_SNAPSHOT As Long = &H2C
Private Const VK_MENU As Long = &H12
Private Const KEYEVENTF_KEYUP As Long = &H2

Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

(次レスに続く)

867 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:16:12 ]
(>>866の続き)

Public Sub printScreen()
  Dim pVersionInfo As OSVERSIONINFO
  pVersionInfo.dwOSVersionInfoSize = Len(pVersionInfo)
  If pVersionInfo.dwMajorVersion >= 5 Then
    Call keybd_event(VK_SNAPSHOT, 1, 0, 0)
  Else
    Call keybd_event(VK_MENU, 0, 0, 0)
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
    Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
    Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
  End If
End Sub

868 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:36:24 ]
(っ´▽`)っ
>>866-867はPrintScreenするマクロだよ。
あとは任せた☆(っ´▽`)ノシ

869 名前:デフォルトの名無しさん [2008/03/01(土) 08:41:50 ]
割り込みで申し訳ないですが、パラレルポート制御を
考えているんですが、VBIOSCMみたいなDLLってVista対応版は
ありますか?
その他でパラレル制御の方法はありますか?
是非ご教授願います。

870 名前:デフォルトの名無しさん [2008/03/01(土) 10:07:39 ]
PC内のフォルダおよびファイルを全て
エクセルシートに書き出したい。
DIR関数でやってみたけど、
フォルダを見つけたら階層を掘って、掘り尽くしたら戻って…
て処理が上手く行かない。
ご協力頼んます



871 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:10:05 ]
(っ´▽`)っ はプロかな?凄いな

872 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:21:41 ]
>>870
(っ´▽`)っ
ヒント:再帰

873 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:28:33 ]
>>870
(っ´▽`)っ
こういう関数を作る。

引数:フォルダ
処理
・引数のフォルダの情報をワークシートに書き出す。
・フォルダ内の全てのファイルの情報をワークシートに書き出す。
・フォルダ内の全てのサブフォルダに対し、それを引数として当関数を呼び出す。

(っ´▽`)っ
ちなみにエラーをキャッチしておかないと、
参照不可のフォルダ、ファイルのところで処理が止まるよ。

ファイル、フォルダに関してはScripting.FileSystemObjectを使うといい。

874 名前:870 mailto:sage [2008/03/01(土) 11:16:18 ]
>(っ´▽`)っ
ありがとう。やってみます。

875 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:25:08 ]
なんだ、ファイルを全て書き出したいと言うから中身を書き出したいのかと思ったぜ。
単にファイル名を書き出したいだけなんだな。

876 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:36:05 ]
FSOに慣れておくとASPにもVBSにも使えるからオトクです(^ω^)

877 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:32:26 ]
>>870
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/310filelist/filelist.html

878 名前:デフォルトの名無しさん [2008/03/02(日) 23:54:52 ]
物凄く基本的な事で申し訳ないのですが・・・、処理待ちでスリープを掛けたく、
 WScript.sleep (250)
と記述していますが、エラー424 オブジェクトが必要です というエラーが出るのです。

何か参照設定が足りないんでしょうか。。

879 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:56:42 ]
ググれよ・・・

880 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:01:10 ]
>>878
WScript.exeを参照設定しろー



881 名前:デフォルトの名無しさん [2008/03/03(月) 00:45:53 ]
>>880
ありがとうございます。
WScript.exeを参照し、Windows Script Host(Ver5.6)を参照設定に加えたのですが
やはり同じエラー出ました。
参照の問題では無さそうなので、設定も含めた他の部分をもう一度見直して見ます。

>>879
当然質問前に検索したのですが、WScriptの参照設定について記述されたページが見つからなかったもので・・・。
すみませんでした。


882 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:15:50 ]
Win32 APIのSleep関数を使えばいいじゃない。

883 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:22:50 ]
>>878
それって、Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)じゃいけないの?

884 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:54:00 ]
自分が過去に作ったソースをよく探すんですけど、
Excelファイルが散在してるし、開いてからAlt+F11を押す手間とか効率悪いです。
GoogleDesktopSearch用Excel VBAプラグインってないもんですかね?

885 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:52:08 ]
別にプラグインじゃなくてもブックファイルからVBAを抽出するだけでもよさそうな。
まぁ、そういうものがあるかどうかって話になるけど。

886 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:59:12 ]
>>885
VBAのコードは、マクロでファイルにexportできるから、作ろうと思えば比較的簡単に作れる。
ただし、そのexportしたものがGDSでIndexingされるかどうかは、別の話。

887 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:43:25 ]
こう? officetanaka.net/excel/vba/vbe/index.htm
保存するとき拡張子に.txtを追加してあげればいいよね。
とりあえず何とかなりそうな気がする。どもども。

888 名前:できたよん mailto:sage [2008/03/03(月) 18:53:27 ]
VBAソースをいっぺんに吐き出すマクロ(Excel2003)
準備
・A列にファイルリストを作る
 参考:ttp://www.vbalab.net/vbaqa/data/excel/log/tree_199.htm
・ツール→マクロ→セキュリティ→信頼できる発行元
 のVBプロジェクトへのアクセスを信頼するをON

ext(1) = ".bas": ext(2) = ".cls": ext(3) = ".frm"
Set xl = CreateObject("Excel.application")
xl.Application.Visible = True
xl.AutomationSecurity = msoAutomationSecurityForceDisable 'マクロ無効
For i = 1 To 9999
 bookName = Cell(i, 1)
 If bookName = "" Then Exit For
 Set bk = xl.Workbooks.Open(bookName, False, True)
 With bk.VBProject.VBComponents
  For j = 1 To .Count
   If .Item(j).Type <= 3 Then _
    .Item(j).Export bookName & "_" & .Item(j).Name & ext(.Item(j).Type) & ".txt"
  Next
 End With
 bk.Close SaveChanges:=False
Next

889 名前:デフォルトの名無しさん [2008/03/04(火) 12:34:14 ]
すいません。KILLの使い方が分かりません。
たとえば、BOOK1のファイルごと、削除したいのですが
どうゆうコードで書いたらいいのですか?
 

890 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:41:43 ]
killはファイルを消すときに使う



891 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:15:20 ]
kill "your.xls"

892 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:57:42 ]
Kill "BOOK1.*"

893 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:30:59 ]
質問させてください。

.value = "hogeの値は" + hoge + "です"

の表記をしたいのですが、""テキストと、変数を並べて表記する方法が分かりません。
+で結合ではありませんでした。
VBAでのテキストと変数の表記方法を教えてくださいませ。

894 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:00:21 ]
>>893
VBの文字列結合は &

895 名前:デフォルトの名無しさん [2008/03/05(水) 12:44:58 ]
Private Sub CommandButton1_Click()
Kill "BOOK1.*"
End Sub
book1のファイルのコマンドボタンでこれを実行すると、ファイルが
みつからないとエラーだでてしまうのですが・・・
ファイルをかっこよく消したいです。

896 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:14:45 ]
>みつからないとエラーだでてしまうのですが・・・
かっこわりw

もしかして、ワイルドカードが使えないんじゃないの?

897 名前:デフォルトの名無しさん [2008/03/05(水) 13:17:44 ]
*←これでしょ?
でも使えないの・・・


898 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:18:02 ]
* これを見るだけでなんか恥ずかしくなってしまうよな

899 名前:デフォルトの名無しさん [2008/03/05(水) 14:42:21 ]
違うの?

900 名前:デフォルトの名無しさん [2008/03/05(水) 15:30:35 ]
すいません、ExecuteExcel4Macroで、ループを使わずに
一気に範囲データを読み込むことは出来ないのでしょうか?



901 名前:デフォルトの名無しさん [2008/03/05(水) 17:00:06 ]
Dim d(100,100)AS Douale3Dim rng AS Range
rng=Range("A1:C3")
このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?

902 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:06:38 ]
Excel VBAとかマジわかんないけど
If ActiveCell.Column <> 1 Then
Exit Function
End If
じゃだめなの?

903 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:29:47 ]
>>901
訂正します。

Dim d(100,100)AS Double
Dim rng AS Range
rng=Range("A1:C3")

d=(double)Transport(rng)

このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?

904 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:34:08 ]
>>900
おれも尻鯛

905 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:17:08 ]
>>900
まずはどうしてもループが使えない事情があるなら説明してみろ
単に使いたくないとか時間が掛かるとかなら帰れ

906 名前:900 mailto:sage [2008/03/05(水) 21:19:31 ]
>>905
お前に言う必要は無い。
わからないならレス不要

907 名前:900 mailto:sage [2008/03/05(水) 21:38:46 ]
自己解決しました。
お前らマジ役立たず

908 名前:900 [2008/03/05(水) 21:39:40 ]
なんだか偽者出てるみたいですが、900です。

>>905
ループで一度データをコピーするプログラムを作成したのですが、
開始から終了までかなり時間がかかってしまうことが分かりました。
処理時間を軽減できないかと考えて、範囲ごとコピーできないかと考えた
のが理由です。


909 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:43:04 ]
縦横変換したものを一旦シートに貼り付けて、それから変数に代入しろ

910 名前:デフォルトの名無しさん [2008/03/06(木) 02:28:41 ]
>>900
速度向上のためにはSelectするな!withを使え!
Rangeで取り込んで配列に一括取り込み。




911 名前:デフォルトの名無しさん [2008/03/06(木) 02:32:43 ]
>>903
まず型変換して代入で可能
d=CDbl(rng)

あと行列逆転はFor〜Nextで1セル毎にループでできるが、一括でできる方法はないかな?



912 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:45:45 ]
速度気にするなら、まずExecuteExcel4Macroでやろうってのが間違いだと気付け

913 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:06:42 ]
>>908
ExecuteExcel4Macroなんか使って読みにくく、また他に使い途もないコードを書くより、
ADO使って"SELECT * FROM [Sheet1$]"みたいにやった方が、将来的に考えて
色々と応用できて幸せになれる確率が高いぞ


914 名前:900 mailto:sage [2008/03/06(木) 09:50:11 ]
御回答ありがとうございます。
ExdcuteExcel4Macroは使わない方針でいってみたいと思います。

915 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:59:52 ]
>>911
>>909

916 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:11:06 ]
Publicで宣言したプロシージャを
ツール→マクロ→マクロとメニュー選択した際のダイヤログボックスに
表示させない方法があったと思うのですが、
どうやればいいでしょう????

917 名前:初心者 [2008/03/06(木) 11:40:13 ]
初歩的な質問かと思いますが、可能な限り過去の書き込みを検索しましたが、解決できませんでしたので、質問させていただきます。

A1からA10に数値の値が入っているとします。
もしこのA1からA10までの値がすべて0だったら、○○というプログラムを実行する、というマクロを組みたいと思っています。

If Worksheets("Sheet1").Range("A1:A10") = 0 Then
Call ○○
End If

というふうに自分では作ってみたものの、うまくいきません。
アドバイスの方よろしくお願いします。


918 名前:デフォルトの名無しさん [2008/03/06(木) 15:42:25 ]
>>915
シート作成は速度の関係上できるかぎり避けたいのです。
関数やプロパティで行列を逆に入れ替える方法はないでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:47:34 ]
>>918
計測してから物を言え。

920 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:12:20 ]
>>917
dim i as integer
for i = 0 to 9
if worksheets("sheet1").range("a1")..text <> "0" then exit for
next
if i == 10 then
call ***
end if



921 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:13:18 ]
あ、思いっきり間違ってた。
if worksheets("sheet1").range("a1")..offset(i,0).text <> "0" then exit for
が正解。

922 名前:デフォルトの名無しさん [2008/03/06(木) 16:47:13 ]
>>919
シート作成するのが通常よく使うよね。
VBAではあまり速度を問われないことがおおいから。
私もそうですし他の方法しか教えられない。

>>918
気長にVBAスペシャリストを待ちましょう。


923 名前:919 mailto:sage [2008/03/06(木) 16:53:13 ]
スペシャリストの俺に喧嘩売ってんのか?

924 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:02:20 ]
取りうる方法は三つしかない。
・行列を変換しながら1セルごと配列にコピー
・rangeを配列にまるごとコピーした後に、行列を変換しながら別の配列に代入
・行列を変換して別のシート(同じシートでもいいが)にコピーしてから、rangeを配列にコピー

実行する内容や量やExcelのバージョンやPCのスペックによって変わるから、
自分で測って一番速い奴を使え。

925 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:24:23 ]
んなこたーない。

dim rng as range
dim d as variant
set rng = worksheets("sheet1").range("a1:c3")
d = application.worksheetfunction.transpose(rng)


926 名前:デフォルトの名無しさん [2008/03/06(木) 18:43:57 ]
教えて先生!!
あたしシートの追加をしたいのぉ

Sub Macro1()
Dim unko As String
unko = "ウンコ"
Sheets.Add ?????
End Sub

変数名を取得して、その変数名をシート名としたシートを追加したいというかぁ
リネームじゃなくて、ダイレクトに追加できればいいなぁとおもうの。
エロイ人おしえてーー。

927 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:07:32 ]
>>901
dがVariant型でよければ、
d = WorksheetFunction.Transpose(Range("A1:C3"))
でdには縦横入れ替えた2次元配列が格納される。

928 名前:927 mailto:sage [2008/03/06(木) 20:10:40 ]
よく見たら>>925でがいしゅつじゃねーか。


929 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:38:03 ]
>>916
そういう時は、dummyで使わない引数をプロシジャの()の中にセットする様にしているけど邪道か?


930 名前:デフォルトの名無しさん [2008/03/06(木) 21:14:07 ]
>>925

dim rng as range
dim tmp as variant
dim d as double
set rng = worksheets("sheet1").range("a1:c3")
tmp = application.worksheetfunction.transpose(rng)

最後に
forループで
tmp(i,j)からCDbl(d(i,j))に代入しました。
かなり速度が改善しました。
ありがとうございました。



931 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:15:09 ]
クラスを書く習慣を付ける

932 名前:916 mailto:sage [2008/03/06(木) 22:26:58 ]
>>929
問題なしです!ありがとうございました!

933 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:06:52 ]
>>895
book1を開きながらbook1ファイルは削除できまい。
あと、book1は何処に保存してあるのか。

934 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:08:32 ]
>>931
誰に言ってるの?
必要ならつけりゃいいが、必要ない場合もある。
たとえばシートモジュールでMe.なんてウザイだけ。

935 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:24:40 ]
>>934
何だよヴォケ!
クラスを明示するの当たり前だろ?
>>925みたいなコードもブックから明示してないからまだまだだね。
ブックの上のApplicationも明示しないとね。


936 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:21:54 ]
相手の欠点はよくみえるが自分の欠点はみえないんだよ。
こどもじゃあるまいし、書いてることをそのまま実行したりはしないよ。
ヒントがわかれば十分。

937 名前:926 mailto:sage [2008/03/07(金) 05:40:25 ]
うぅ・・・分かる方、いらっしゃいましたらhelpです・・・><

もしくは、追加→リネーム の方法がベストなのでしょうか。
bookを開いてから、何枚のシートを追加したかの監査変数を使う事が避けられれば理想なのですが・・。

皆さんどのようにしているのかも興味があります。
何卒よろしくお願いします。
お礼にこれあげます。>+(

938 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:08:02 ]
>>937
sheets.Add().name="ウンコ"

939 名前:938 mailto:sage [2008/03/07(金) 07:12:38 ]
>>937
試してみたら()も省略できた

sheets.Add.name="ウンコ"

940 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:30:45 ]
>>937
一応マジレスしておくと、質問するならふざけるな。
ふざけないで質問してたらきっと即レスついたはずだ。



941 名前:895 [2008/03/07(金) 09:04:48 ]
933さんありがとうございます。
>あと、book1は何処に保存してあるのか。
これは、C:\Documents and Settings\xxx
と指定すればいいのでしょうか?


942 名前:895 [2008/03/07(金) 09:17:12 ]
それと、例えば、エクセルのファイルネーム”あ”.xlsのファイルにパスワード
を設けて(例えばパスワードは10)他の人に勝手に開かれないようにしてるのですが
人のPCのデータを除き見るやから達からデータを守る為、パスワードの入力を
例えば3回失敗したらファイルごと、どこのディレクトリに合っても強制削除したいのですが
どうコードを書いたらいいのでしょか?


943 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:34:01 ]
自分自身のマクロでそれをするのは無理。


944 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:05:26 ]
>>935
おろ?
君は>>925>>931じゃなかったの?
似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。
ってか彼はうるさい割にはいつもシートからしか明示しないがね。

945 名前:925 mailto:sage [2008/03/07(金) 11:16:26 ]
なんだか知らんけど、俺を巻き込まないでくれ・・・

946 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:19:45 ]
質問です。私の持っているVBA本に
「同一モジュール内に同名の行ラベルを設置できない」
って書いてあったので、検証しようと思い以下のサンプルコードでテストしました。

'  プロシージャ「p1」
Public Sub p1()
 On Error GoTo ErrHandler

 Err.Raise 10
 Exit Sub
ErrHandler:
 Debug.Print "エラー発生@"
End Sub

'  プロシージャ「p2」
Public Sub p2()
 On Error GoTo ErrHandler

 Err.Raise 10
 Exit Sub
ErrHandler:
 Debug.Print "エラー発生A"
End Sub

同一モジュール内にプロシージャ「p1」も「p2」も「ErrHandler:」という行ラベルを設置していますが、
それぞれの「On Error GoTo」はきちんとプロシージャ内の「ErrHandler」へ処理しています。

これってどういう事なんでしょう?
私の持ってるVBA本が間違っているのでしょうか???



947 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:46:18 ]
>>946
はい、その通り間違っているので、書名を公開してみんなが不幸せになるのを防ぎましょう。

948 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:56:10 ]
マクロの中で自分のファイル名(フルパスで)を取得するにはどうすればよいですか?

949 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:02:21 ]
thisworkbook.pathとname

950 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:29:13 ]
>>942

Sub hoge()
  Dim a As String
  Dim w As Object
  Dim v As Object
  a = ThisWorkbook.Path & "\" & ThisWorkbook.Name
  Set w = CreateObject("WScript.Shell")
  Set v = w.exec("cmd.exe /c del """ & a)
  Application.Quit
'  Do Until v.stdout.atendofstream
'    MsgBox (v.stdout.readline)
'  Loop
End Sub




951 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:47:43 ]
>>950
それ、マクロ無効にすると開けちゃうから。

952 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 23:48:02 ]
「クラスを書く習慣をつける」って書いたの俺なんだけどさ(>>935じゃない)
別件(Public云々)にレス付けたつもりだったんだが、曲解した挙げ句に意味不明な粘着を発揮してるキチガイが居るな
なんだよ「Mougにホゲホゲ」ってよ
見えない敵が見えてる系のキチガイの考えることはマジで分からんw

> 934 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 00:08:32
> >>931
> 誰に言ってるの?
> 必要ならつけりゃいいが、必要ない場合もある。
> たとえばシートモジュールでMe.なんてウザイだけ。

> 944 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 11:05:26
> >>935
> おろ?
> 君は>>925>>931じゃなかったの?
> 似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。
> ってか彼はうるさい割にはいつもシートからしか明示しないがね。

953 名前:デフォルトの名無しさん [2008/03/08(土) 00:04:09 ]
Excel2003
XP SP2

ブックを非表示にして、フォームをタスクトレイに常駐させてタイマー処理は実装可能でしょうか?

教えてエロい人

954 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:24:55 ]
YES

955 名前:944 mailto:sage [2008/03/08(土) 04:39:19 ]
>>952
とぼけても無駄無駄w
お前はMougでも感じ悪いけどこっちでも感じ悪いな。

956 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 05:04:10 ]
NO

957 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 08:28:43 ]
とぼけてるのがいるなw

958 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:35:40 ]
見えない敵と戦う聖戦士がム板にも湧いてきて、粘着してくるとは思わなんだわ
悪いことは言わないからMougとやらで聖戦に興じてろや
釣りにしてもキモすぎるし、真性だとしても治療に付き合う義務はない

959 名前:デフォルトの名無しさん [2008/03/08(土) 15:06:06 ]
アクティブじゃないシートの選択しているセルの値ってとれないでしょうか?
シート名が特定できれば、一旦アクティブにして値をとって戻るとか出来るのですが
いろいろなシート(名)を対象に出来るようにと思っています
よろしくお願いいたします


960 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:48:31 ]
>>958
いらんおせっかい書くからだよ。
つまらん自説を述べるから粘着される。



961 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:07:05 ]
VBEで挿入できるものに、ユーザーフォーム、標準モジュール、クラスモジュールの3つがあるけど、
クラスモジュールだけ使ったことがない。これってどういう時に使うもんなんです?

Excel2002ですけど。

962 名前:デフォルトの名無しさん [2008/03/08(土) 23:37:13 ]
そのまんまクラスを書くモジュール
VBAだと継承ができないんで、独自イベントを実装したいときとか、
構造体代わりに使うとか、コントロール配列を実現させたいときに
使うぐらいしかないけどね(^ω^;)

963 名前:961 mailto:sage [2008/03/09(日) 08:10:28 ]
んんん、、、判らん w スマソ まだ俺のレベルでは必要ないって事すかね www

964 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:25:51 ]
ExcelVBAごときにクラスなんかいらん

965 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:39:07 ]
strategy patternを使いたいときとか

966 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:28:15 ]
コントロール配列を実現させたいとき=継承
だったと思うから

「継承代わりに使いたいときだけ」
しか使わん

967 名前:デフォルトの名無しさん [2008/03/09(日) 18:58:31 ]
CSVの書き出しに関して、教えてください。

EXCELデータを、カンマ区切りの改行コードつきCSV形式で書き出したいのです。
↓このような感じ
項目1,項目2,項目3,改行コード(vbcrlf)項目1,項目2,項目3・・・
print # でコード記述

データの最後は改行コード(vbcrlf)で終了しなくてはいけないのですが、
そうすると当然のことですが、最後に余分な空白行ができてしまいます。

改行コードで終了するが、最後の空白行はなくす、ということは可能なのでしょうか?

「もう。無理です・・・」と泣きを入れてみたのですが、なんとかしろ、
とのお達しがあり、もし、良い方法があれば伝授いただければ助かります!!

宜しくお願いします。


968 名前:エスパー君登場 mailto:sage [2008/03/09(日) 19:20:08 ]
最後に余分な空白行が出来ているというのは気のせい。

969 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:26:29 ]
「余分な空白行」というのは、CRLFCRLFのことだが、もしファイル末尾がそうなっているとしたら、
それはコードのバグ。
ファイルの末尾がCRLFで終わっているなら、余分な空白行など存在しない。

970 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:58:51 ]
ぐぐれ 最後の改行 vb



971 名前:デフォルトの名無しさん [2008/03/09(日) 20:08:08 ]
ありがとうございます
「EXCEL VBA 改行コード」で検索していたのですが、
良い方法を見つけることが出来ず、悩んでいました。
頑張って挑戦してみます


972 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:55:39 ]
最後の改行と余分な空白行というのは違う意味だと思う

973 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:06:19 ]
>>971
ちょっと待て。何をどう挑戦するつもりなんだ?

974 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 21:56:06 ]
(っ´▽`)っ
EOF直前の改行は本来必要なものと考えるが。
たまにEOF直前の改行がないテキストファイルを見るが、あれはどうなの?
ちなみにviだとエラーメッセージが出るぞ。

975 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:01:32 ]
(っ´▽`)っ??? >>967のいう「余分な空白行」ってこういうことだよね?

"aaa\r\nbbb\r\nccc\r\n"(\r\nは改行コード)
これを
"aaa\r\nbbb\r\nccc"
にしたいってことでしょ?多分。
「『なんとかしろ、』とのお達しがあり」
ってあるけど、その「なんとかする」理由は何だろうね?
何もないのに言ってるなら、その人にもうちょっと勉強しろって言いたいんだけどね。

976 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:02:33 ]
(っ´ω`)っ
おもいっきりスレ違いだね
いきててごめんね

977 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:01:20 ]
「余分な空行」という夢オチ

978 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:18:21 ]
CSVファイルはRFC 4180の仕様だと、
最後のレコードの後には改行はあってもなくてもいいらしい。
オレの場合は最後のレコードの後には必ず改行付けるけどね。

979 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:25:11 ]
975のようなテキストをメモ帳か何かテキストエディタで開いたとき、
aaa
bbb
ccc
I ← ここにカーソルが移動できる
ということを「最後に余分な空白行ができてしまう」と言っているんだと思った。
だとしたら、それは最後にCRLFを置いているからだとしか言いようがない。

980 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:26:00 ]
excel2003
xp
他のシートの複数セルのSetの仕方がわかりません。

Dim Rng AsRange
Sheets("sheet2").Activate
Set Rng = Range(Cells(1, 1), Cells(2, 2))
Sheets("sheet1").Activate
Set Rng = Nothing
こう書けば一応動くのですがWithを使い
With Sheets("sheet2")
Set Rng = Range(.Cells(1, 1), .Cells(2, 2))
End With
と書いてもsheet1のA1: B2が入ってしまいます。
よろしくお願いします。



981 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:40:10 ]
Set Rng = .Range(.Cells(1, 1), .Cells(2, 2))

982 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:39:29 ]
Unix文化ではうんたらかんたら

983 名前:デフォルトの名無しさん [2008/03/10(月) 12:48:36 ]
「#N/A」のようなエラーセルの値を変数に入れようとすると
「型が一致しません」というエラーが出るのですが、
例えばエラーセルの値をコンスタントに、「""」として処理するような
事は可能なのでしょうか?

VBAがセルのエラー値をどのように扱っているのか、
msgboxで出すことも出来ないので
困っています。

お知恵拝借できると幸いです。

984 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:04:33 ]
トラップ処理すれば

985 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:38:14 ]
If(IsError(...

986 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:39:51 ]
ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/if_is.htm#is


987 名前:983 [2008/03/10(月) 14:27:26 ]
>>984-986
ありがとうございます。
どちらかの方法でやってみようと思います。

988 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 16:59:57 ]
Ctrl+セルクリックで選択範囲を追加していけますよね
それをVBAで行うにはどうしたらいいですか?
例えば.Cells(i,j)が選択してある状態で、さらにCells(i+10,j)を追加で選択するにはどうしたらいいですか?

.Cells(i,j).Select
hoge
.Cells(i+10,j)Select ←ここで、それまでの選択範囲に追加する形にしたい


989 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 17:23:03 ]
selectionでrange取得
rangeに新cellを追加
追加したrangeをselect

990 名前:988 mailto:sage [2008/03/10(月) 18:07:51 ]
>>989
>rangeに新セルを追加
はどうやって実現するのですか?



991 名前:デフォルトの名無しさん [2008/03/10(月) 19:46:03 ]
Excel2003
XP SP2

結構でかいファイルのI/Oやコピーなどの処理をワーカースレッドで行なうことは可能でしょうか?

992 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:46:02 ]
>>990
union


993 名前:デフォルトの名無しさん [2008/03/10(月) 20:52:13 ]
勉強中の者です。初歩的な質問で申し訳ないのですが、お力添えをお願いします。

条件分岐で、"A1"セルに何か入っている場合に実行、
空欄の場合はエラーメッセージを出したく思います。

if range("A1") = true then
msgbox("実行")
else
msgbox("空欄です。")
end if

としてみたのですが、思うように動作致しません。
てっきり、false = 0 、 true は何か要素がある。と頭にあったのでやってみたのですが、
VBAの壁にぶちあたっております。

何卒、ご助力を賜りたく存じます。よろしくお願いします。

994 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:57:49 ]
=""

995 名前:デフォルトの名無しさん [2008/03/10(月) 21:21:05 ]
If Range("a1").Value <> "" Then
MsgBox "何か入っている"
Else
MsgBox "空欄"
End If

996 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:35:39 ]
false = 0 、 true = -1
0 = false、 0以外 = true


997 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:03:18 ]
if Typename(Range("A1")) <> "Empty" then 〜
ではどうか

998 名前:デフォルトの名無しさん [2008/03/10(月) 22:47:48 ]
みなさんありがとうございます。
検証してる間にスレ落ちしてしまうと申し訳ないので、お礼だけ先に。

明日検証いたします。
本当にありがとうございました。

999 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 08:20:17 ]
.

1000 名前:小倉優子 ◆YUKOH0W58Q mailto:sage [2008/03/11(火) 08:20:37 ]
1000ならジュースでも飲むか



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef