Excel VBA質問スレ Part5
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/12/12(水) 17:27:44質問前に 【 >>2-3 】 あたりを良く読むこと
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1189814602/
0002デフォルトの名無しさん
2007/12/12(水) 17:28:23★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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0003デフォルトの名無しさん
2007/12/12(水) 17:29:0101 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
0004デフォルトの名無しさん
2007/12/12(水) 17:29:500005デフォルトの名無しさん
2007/12/12(水) 17:53:17どなたか教えてくださると助かりますm(_ _)m
0006デフォルトの名無しさん
2007/12/12(水) 18:04:320007前スレのクレクレ君
2007/12/12(水) 18:16:450008デフォルトの名無しさん
2007/12/12(水) 18:31:18hoge = Selection.Value のSelectionが結合セルだと2次元配列になる。
結合セルをSelectしないでhoge = Range("A1").Value とすれば2次元配列にならない。
2次元配列なら MsgBox hoge(1,1) としないと動かないが、2次元配列じゃなければ
MsgBox hoge で動く。
0009前スレのクレクレ君 = 1000
2007/12/12(水) 18:37:44な、なるほど!
0010デフォルトの名無しさん
2007/12/12(水) 18:48:01セル2に式「=CHAR( セル1 + 64 )」をいれときゃいいんでね?
VBAは関係ないけど。
0011デフォルトの名無しさん
2007/12/12(水) 19:08:092. 下記の数値の和を繰り返し文を使用して算出しなさい。
1+2+3+4+……+100
1の二乗+2の二乗+3の二乗+……+20の二乗
1の三乗+2の三乗+3の三乗+....+20の三乗
これをExcelVBAを使って解かなきゃいけないんだけど全くわかりせん。
どなたか教えていただけませんでしょうか。
0012デフォルトの名無しさん
2007/12/12(水) 19:21:00>★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
> コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
> ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0013デフォルトの名無しさん
2007/12/12(水) 19:46:391. MsgBox 閏年 & 閏年 & 。。。
2. 1^2+2^2+3^2 。。。 +20^2
0014デフォルトの名無しさん
2007/12/12(水) 21:23:03Worksheets("Sheet1").Activate
For i = 1 To 1000
If Cells(A, i) = "" Then
Cells(A, i).Delete shift:=xlUp
End If
Next
End Sub
これのダメなところを教えてください。
エラーが出るんですよね
0016デフォルトの名無しさん
2007/12/12(水) 21:39:200017デフォルトの名無しさん
2007/12/12(水) 21:48:03ワラタw
>>14
セルズA,iを 1,i に変えたらうごいたぜ。 Excel2007 だけどな。
0018デフォルトの名無しさん
2007/12/12(水) 21:49:000019デフォルトの名無しさん
2007/12/12(水) 21:59:26そうか?
Sub 空白セル削除()
ここら辺はわかりやすくてよい。
0020デフォルトの名無しさん
2007/12/12(水) 22:07:00すいませんでした
以後気を付けます
>>17
thx
マクロはじめたばっかで基本的な勘違いをしてたぜw
>>18
是非参考コードをお願いします。
0021デフォルトの名無しさん
2007/12/12(水) 22:41:020022デフォルトの名無しさん
2007/12/12(水) 22:57:160023デフォルトの名無しさん
2007/12/12(水) 23:45:19you ga sundara
beroberobaa
0024デフォルトの名無しさん
2007/12/13(木) 20:55:370025デフォルトの名無しさん
2007/12/13(木) 21:16:51まあインデックスのポインタのことだろうけど
0026デフォルトの名無しさん
2007/12/13(木) 21:41:430027デフォルトの名無しさん
2007/12/13(木) 22:37:33Dim 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行目に答えを入れるにはどう記載すればよいでしょうか?
0028デフォルトの名無しさん
2007/12/14(金) 01:08:47処理できますか たとえば1から100までアップしたとき
changeだと100回処理しなけらばならないので
mouseupで100の値についてだけ処理したいのです
0029デフォルトの名無しさん
2007/12/14(金) 05:42:320030デフォルトの名無しさん
2007/12/14(金) 07:42:42dに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
0031デフォルトの名無しさん
2007/12/14(金) 07:52:37> >>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に入れたいのです。
0032デフォルトの名無しさん
2007/12/14(金) 07:57:53>二次元配列を使っているので。配列はVariant型って考えは間違っていますか?
間違ってる。整数なら普通IntegerかLong
>Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
Frequencyの戻り値は1ベースの2次元配列だろ?
0033デフォルトの名無しさん
2007/12/14(金) 08:09:57Dim Data() As Long
みたいに宣言するんだからな。
0034デフォルトの名無しさん
2007/12/14(金) 08:20:37だったらVariantでいい。ただRedimは不要。
0035デフォルトの名無しさん
2007/12/14(金) 08:50:14> もしかしてDataとかdにはセル範囲の値を一括して代入してるのか?
> だったらVariantでいい。ただRedimは不要。
逆です。Dataの値を後でセル範囲に一括して代入します。
Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。
0036デフォルトの名無しさん
2007/12/14(金) 08:54:53> >Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
> Frequencyの戻り値は1ベースの2次元配列だろ?えっ!?区間と度数の二次元配列ですか?調べたつもりが。。。
ということはfをあるセル範囲(2×n)に代入すればよいということですね。
0037デフォルトの名無しさん
2007/12/14(金) 09:28:16>Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。
Variant型の変数に代入する場合不要ということ。
d = Range("A1:E1").Value
みたいなときのことね。
>区間と度数の二次元配列ですか?
度数だけの2次元配列。
>ということはfをあるセル範囲(2×n)に代入すればよいということですね。
2×nじゃなくて1×n
縦じゃなくて横なならTransposeしないと出来ない。
縦1列ならそのまま可
0038デフォルトの名無しさん
2007/12/14(金) 09:58:09値を返すことって出来ます?
置換前の文章と照合するしかにあ?
003937
2007/12/14(金) 10:29:12仮にデータがA1:A61にあり、区間がB1:B20なら
f = Worksheetfunction.Frequency(Range("A1:A61"),Range("B1:B20"))
でいい。引数を変数にするならRange型だ。
戻り値は区間より一つ多い11x1,の2次元配列になってる。
一つ多いのは区間の最後のデータより大きいもののカウント用
0040デフォルトの名無しさん
2007/12/14(金) 10:33:22置換前の文字列と照合するか、先にInStrで調べてからでもいいんじゃない?
004139
2007/12/14(金) 10:35:05戻り値は区間より一つ多い21x1の2次元配列な
0042デフォルトの名無しさん
2007/12/14(金) 10:59:420043デフォルトの名無しさん
2007/12/14(金) 11:10:28あ、そうか
0044デフォルトの名無しさん
2007/12/14(金) 16:16:50これをp毎に分割するにはどうすればいいでしょうか。
instrでpの場所を探して、その文字数分leftで取り出せばいいと思うのですが
もっといい方法は無いでしょうか。
0045デフォルトの名無しさん
2007/12/14(金) 16:39:59VB6スレいけ
0046デフォルトの名無しさん
2007/12/14(金) 16:57:070047デフォルトの名無しさん
2007/12/14(金) 17:32:08行けばわかる
0048デフォルトの名無しさん
2007/12/14(金) 18:16:47そんなに目くじらたてなくてもいいんジャマイカ
pで分割してセルに書き込むのかも知らんしだろ?
つSplit関数
0049デフォルトの名無しさん
2007/12/14(金) 18:25:14Replace関数もReplaceメソッドも頭文字は大文字になるぞ?
変数の宣言で使ってるとかプロシージャ名で使ってるとかなんか変なことしてるんじゃない?
0050デフォルトの名無しさん
2007/12/15(土) 22:48:14プログラミングは初心者です。
かつてHTMLとCSS、javascriptをほんの少しだけ学校の夏期講座で勉強した程度です。
0051デフォルトの名無しさん
2007/12/15(土) 23:07:13Excelでお仕事
でぐぐる
「VBA基本」を見る
書籍不要。
0052デフォルトの名無しさん
2007/12/16(日) 00:25:54そこだと変なクセがつかないか?
最近見てないけど、前みたときはあまりいい内容ではなかった。
0053デフォルトの名無しさん
2007/12/16(日) 10:42:55VBAエキスパートの参考書をやってから
あとはリファレンスとして上記のEXCELでお仕事を参照すればいいと思う
0054デフォルトの名無しさん
2007/12/16(日) 15:21:49コストは非常に安い。
0055デフォルトの名無しさん
2007/12/16(日) 15:40:300056デフォルトの名無しさん
2007/12/16(日) 18:59:33VBAのリファレンスにはならねーな。
0057デフォルトの名無しさん
2007/12/16(日) 19:37:34一人の出した案を叩くばかりという状況にワロタ
まあ、ここの回答陣がVB(A)初心者だったのが
何年前かと考えると…
古すぎてもう売ってないとか
対応バージョンがExcel95とか、
当時はWebとかほとんど無かったとか
そもそも他言語から入ったとかだろうから
仕方ないだろうけど。
>>50
まあAmazonの書評でも見るか
(これもあてにはならないが、ここよりは…)
もしくは適当なVBA本の著者名でぐぐると
サイト持ってて入門編を公開している人もいたりする。
0058デフォルトの名無しさん
2007/12/16(日) 21:25:06mougの人は嫌い。
0059デフォルトの名無しさん
2007/12/17(月) 10:52:50replaceは名前としては一切使ってないのですが
(過去にそのプロシージャ内で使ったことがあるかも・・・)
なぜか、小文字です・・・。
あと、古いExcel97では、replace使えないんですね。ショック・・・
サブルーチンで誰か作ってないかな。
0060デフォルトの名無しさん
2007/12/17(月) 10:59:20ありがとうございます
0061デフォルトの名無しさん
2007/12/17(月) 14:47:55Excel97でもOSが古すぎない限り(古くてもWSHをインストールすれば)
ツール→参照設定で
「Microsoft VBScript Regular Expressions 5.5」に参照設定して
RegExpオブジェクトの.Replaceを使えば
ただしReplace関数より機能は高いが
正規表現な分ハードルも高い。
0062デフォルトの名無しさん
2007/12/17(月) 17:55:16ウホッ
確かに難しそうだ
0063デフォルトの名無しさん
2007/12/17(月) 18:15:07横レスだが、折れも、ずいぶん前に、何ヶ月前ぐらいかな?
何かの時にrangeが1カ所だけRangeにならないことがあった。いろいろと試していたときだった。そこだけ、いろいろと書き直しても小文字のままだったので、
折れも同じように、気になって聞いたが、誰も答えようがなかったみたいだった。
チャンと動いておれば、気にしないでオケw
0064デフォルトの名無しさん
2007/12/17(月) 19:04:02' ↑(Chart) ↑(Sheet)
EXCEL2000だと正常に動作する上記のようなコードがあります。
EXCEL2007だと、
"指定したコレクションに対するインデックスが境界を超えています。"
というようなエラーが出てしまいます。
(上記コードをコメントアウトすると正常終了します)
普通のシートのセルの文字列を、グラフシートのラベルにコピーする
コードなのですが、2日ほどひたすら検索しましたが、
何が原因なのかがわからない状況です。仕事場からソースを持ち帰ること
ができないので、これだけでは解析不能かもしれませんが、
何かヒントでも頂けたら幸いです。よろしくお願いいたします。
0065デフォルトの名無しさん
2007/12/17(月) 19:58:170066デフォルトの名無しさん
2007/12/17(月) 20:16:50Selection.Delete shift:=xlShiftUp
で「A列に何も入っていない行」を削除できますが、
「A列およびB列に何も入っていない行」は削除できませんでしょうか?
Range("A:B").〜とすると
「A列もしくはB列に何も入っていない行」になってしまいます。
結局for〜nextでCells(i,1).value&Cells(i,2).value=""かどうか調べて、みたいなので
動くことは動いたんだけどなにか簡単な方法はないかと。
0067デフォルトの名無しさん
2007/12/17(月) 22:04:20前後関係意味不明
上限がいいかげんなループの中でShape回してるんジャマイカ?
>>66
ない
Range("A:B")とやったところで内部的には1次元でしかないので
0068デフォルトの名無しさん
2007/12/17(月) 22:35:37フォーム上のボタンを押してファイル選択ダイアログをだしているんですが
ファイル選択ダイアログがマウスクリックを受け付けてくれません
EXCEL 2000だと問題なく動くのですがEXCEL XPだとこの症状がでます
回避策ないでしょうか
0069デフォルトの名無しさん
2007/12/17(月) 22:42:180070デフォルトの名無しさん
2007/12/17(月) 22:51:51Private 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
0071デフォルトの名無しさん
2007/12/18(火) 12:32:52とカイル君に聞いても教えてくれなかった。
0072デフォルトの名無しさん
2007/12/18(火) 12:56:200073デフォルトの名無しさん
2007/12/18(火) 14:14:140074デフォルトの名無しさん
2007/12/18(火) 17:24:28何も確認せずにレスするんで恐縮だが、最小化じゃなくて、非表示(App~.Visible)とかじゃダメ?
0075デフォルトの名無しさん
2007/12/18(火) 18:54:33>>67
ありがとうございました。
マクロの記録で確認しましたところ、shapes〜となるのですが、
そのコードで再度実行すると、やはりそこでエラーになってしまいました。
それからまたいろいろと調べていたところ、下記を参考にして解決いたしました。
やはり、EXCEL2007が原因だったようです。
http://www2.moug.net/bbs/exvba/20070920000006.htm
0076デフォルトの名無しさん
2007/12/18(火) 19:33:13実はコレクションってのがVBAの真理だったりする
0077デフォルトの名無しさん
2007/12/18(火) 22:55:28指摘のとおりに変えたらEXCEL XPで動きました ありがとうございます
明日EXCEL2000でも確認してみます
0078デフォルトの名無しさん
2007/12/19(水) 05:50:53ようにしたいんですがなにか方法ないでしょうか。
ランダムに複数セルの値を取得する→消去 の流れでいいんでしょうか。
ご教授願います。すれ違いだったらすいません。
*例えばA1〜A5に文字列が入力されていて、マクロを実行したらA1のセルの値のみがのこって他を
消すようにできないかと思います。
0079デフォルトの名無しさん
2007/12/19(水) 09:42:17Sub 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
0080デフォルトの名無しさん
2007/12/19(水) 09:46:00英語とか・・・色々すまん煎ってくるわ
0081デフォルトの名無しさん
2007/12/19(水) 10:06:52yarinaosi:
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
0082デフォルトの名無しさん
2007/12/19(水) 12:15:59その式だと10になる確率が低いんじゃねーのか?
9になるのはround(rand(),1)が8.5以上9.5未満の1の幅があるが
10になるのは9.5以上で半分の幅しかねーな。
ROUNDなんか使っちゃいかんよ。
Range("D1)..Value = Int(Rnd*10)+1
とすれば1〜10の確率はそれぞれ10パーセントだ。
0083デフォルトの名無しさん
2007/12/19(水) 12:20:569になるのはrand()が0.85以上0.95未満の0.1の幅があるが
10になるのは0.95以上で半分の幅
008479,81
2007/12/19(水) 14:14:48うーむ、なるほど。
0085デフォルトの名無しさん
2007/12/19(水) 17:53:38しかしフォルダ名に空白があると存在しませんとエラーがでます。
openfile filepath & filename
どのように書けばよいのでしょうか?
0086デフォルトの名無しさん
2007/12/19(水) 18:00:580087デフォルトの名無しさん
2007/12/19(水) 18:06:150088デフォルトの名無しさん
2007/12/20(木) 05:13:01GetOuterHtmlみたいな感じの名前でしたが、手元にVBがなく、ググってもでてこない
0089デフォルトの名無しさん
2007/12/20(木) 07:41:310090デフォルトの名無しさん
2007/12/20(木) 09:53:17スレ違い
0091デフォルトの名無しさん
2007/12/20(木) 11:06:381+2+3+4+……+100
この和を繰り返し文を使用して出せというのがいまだにわかりません。
この場合For文を使えばいいんでしょうか?
無知で申し訳ないです。
0092デフォルトの名無しさん
2007/12/20(木) 11:39:16スレ違い For文でできる。 どうしても分からなければVBスレで。
0093デフォルトの名無しさん
2007/12/20(木) 12:07:29for i=1 to 100
a(i) = i
next
msgbox (a(1) + a(100))/2*100
0094デフォルトの名無しさん
2007/12/20(木) 15:01:54以前エクセル付属のVBAで使った記憶があるのですが
0095デフォルトの名無しさん
2007/12/20(木) 15:13:37Microsoft HTML Object Libraryを参照設定して、F2でMSHTMLを眺めて、ググるなりしろ。
これ以上の質問はVBスレでやれ。
0096デフォルトの名無しさん
2007/12/20(木) 16:04:23ワロタw
0097デフォルトの名無しさん
2007/12/20(木) 16:19:13Dim 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中の最後の文字しか変換されません。
どうすればよいでしょうか...
0098デフォルトの名無しさん
2007/12/20(木) 16:32:06かろうじてExcel要素が混じってるが、基本はExcel関係ないぞ。
Forの行にブレークポイントを設定して、ステップ実行させながら、変数の中を見てみろ。
0099デフォルトの名無しさん
2007/12/20(木) 17:03:25置換したはずの文字が、ふ、ふ、復活しているよっ!
0100デフォルトの名無しさん
2007/12/20(木) 17:14:26むずかしい
0101デフォルトの名無しさん
2007/12/20(木) 18:53:050102デフォルトの名無しさん
2007/12/20(木) 19:18:31学校の宿題だったっけ?
>>93のFor Nextで合格点もらえるよ。
010397
2007/12/21(金) 09:11:06sentence = Range("A1").Value
0104デフォルトの名無しさん
2007/12/21(金) 19:29:12セルの比較ならApplication.Maxとかでいいけど変数の最大値を取得したいときはどーすれば?
0105デフォルトの名無しさん
2007/12/21(金) 20:31:420106デフォルトの名無しさん
2007/12/21(金) 20:53:110107デフォルトの名無しさん
2007/12/21(金) 21:47:260108デフォルトの名無しさん
2007/12/22(土) 00:34:480109デフォルトの名無しさん
2007/12/22(土) 03:17:54integerの範囲以上の値入れていちいちエラートラップするのはうざいからな
0110デフォルトの名無しさん
2007/12/22(土) 08:44:23・・
Variant・・・
0111デフォルトの名無しさん
2007/12/22(土) 13:51:200112デフォルトの名無しさん
2007/12/22(土) 16:26:16整数で演算する
0113デフォルトの名無しさん
2007/12/22(土) 18:24:320114デフォルトの名無しさん
2007/12/22(土) 18:26:380115デフォルトの名無しさん
2007/12/22(土) 19:43:29w
0116デフォルトの名無しさん
2007/12/22(土) 22:39:180117デフォルトの名無しさん
2007/12/23(日) 00:08:32よく本に掲載されているのは、ルートを有利化せずに分母においてるのがあるが、理由がよくわからなくて。
0118デフォルトの名無しさん
2007/12/23(日) 00:29:44人人人人人
2 3 1 4
1 4 2 3
のように4人でゲームして順位を出す時に、
ちゃんと横の合計が10になるか計算したいのですが
こういう空欄はスルーして計算できませんでしょうか?
0119デフォルトの名無しさん
2007/12/23(日) 00:41:460120デフォルトの名無しさん
2007/12/23(日) 00:58:34その通りでした。どうもありがとうございます
実は例と少し違って合計0になるかだったので勘違いしてました
0121デフォルトの名無しさん
2007/12/23(日) 01:57:250122デフォルトの名無しさん
2007/12/23(日) 04:18:28コンピュータは分母が整数じゃなくても
それほど困らないからいいんじゃないの?
0123デフォルトの名無しさん
2007/12/23(日) 10:51:160124デフォルトの名無しさん
2007/12/23(日) 10:57:090125デフォルトの名無しさん
2007/12/23(日) 11:07:391.同じ機能を実現するために、いかに高速化する記述方法を知っているか。
言語に関わらず必要な知識は、
1.誤差伝幡をいかに少なくするか。
2.いかに高速なアルゴリズム(探索など)を知っているか。
3.その他多数〜
0126デフォルトの名無しさん
2007/12/23(日) 16:14:05開発効率という観点が欠如しているっぽいあなたには、アセンブラをオススメいたします。
0127デフォルトの名無しさん
2007/12/24(月) 00:21:03桁に限界があるので技術計算には向かないが
固定小数点のCurrency型を使うとか。
0128デフォルトの名無しさん
2007/12/24(月) 02:05:32除算をしないか、ロジックで極力計算回数を減らす。関数の戻りの型に注意。あと、スレ違い。
0129デフォルトの名無しさん
2007/12/25(火) 01:14:14セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか?
よろしくお願いします
0130デフォルトの名無しさん
2007/12/25(火) 01:18:51セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
4桁に制限したければそういうifを書けばいい。
0131デフォルトの名無しさん
2007/12/26(水) 00:02:451^2+2^2+3^2+……+20^2
1^3+2^3+3^3+・・・・+20^3
ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。
0132デフォルトの名無しさん
2007/12/26(水) 00:12:390133デフォルトの名無しさん
2007/12/26(水) 00:24:08というか教えてください。
マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で?
やっぱりファイルが大きすぎるのか?
1ファイルで60MBとか無理なのか?
ご存知の方いたら助けてください。
0134デフォルトの名無しさん
2007/12/26(水) 00:29:42うん、でかいw限界点とかはわからんが・・・
Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・
0135デフォルトの名無しさん
2007/12/26(水) 00:55:12そうなんですよ。なんとかお助け願えないでしょうか?
0136デフォルトの名無しさん
2007/12/26(水) 01:06:14a = i
next
0137デフォルトの名無しさん
2007/12/26(水) 01:07:09dim a as integer
for i=1 to 100
a = a + i * 2
next
3は2を変更で
0138デフォルトの名無しさん
2007/12/26(水) 01:21:16ちょっとまて
>>93を採用する気か?それはなー(略
0139デフォルトの名無しさん
2007/12/26(水) 01:22:34どいつもこいつも・・・ここはネタすれなのか?
0140デフォルトの名無しさん
2007/12/26(水) 02:24:13え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。
0141137
2007/12/26(水) 02:37:44汎用性もたせるなら累乗関数使うなり作るなりしてくれ。
dim a as integer
for i=1 to 100
a = a + i * i '2乗
'a = a + i * i * i '3乗
next
0142137
2007/12/26(水) 02:39:07ちゃんとみりゃわかる。
>>97はforが入ってるが結局は(1+100)/2*100だ。
dim sum as integer
for i=1 to 100
sum = sum + i
next
0144デフォルトの名無しさん
2007/12/26(水) 03:36:07100じゃなくて20・・・・
0146デフォルトの名無しさん
2007/12/26(水) 14:22:26Sub 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
0147デフォルトの名無しさん
2007/12/26(水) 14:23:380148デフォルトの名無しさん
2007/12/26(水) 17:17:49これじゃだめですよね・・・
Sub nicochuu()
niwango = InputBox("入力してね", "inputbox")
If niwango = "" Then MsgBox "入力無し": Exit Sub
Range("A1").Value = niwango
If niwango = vbCancel Then Range("A2").Value = "キャンセル"
End Sub
0149デフォルトの名無しさん
2007/12/26(水) 18:33:01excelは2000でIEは7です。
0150デフォルトの名無しさん
2007/12/26(水) 19:14:15以下のマクロ作成方法を教えてください。
プロシージャ「斜め移動」の作成
IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。
プロシージャ「四角移動」の作成
図形が四角形を描くように移動する(移動の軌跡が四角形になる)、
「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。
☆――→
↑ |
| |
| ↓
←――
プロシージャ「三角移動」の作成
「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。
ただし正三角形でなくてよい。
0151デフォルトの名無しさん
2007/12/26(水) 22:22:06どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。
ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。
エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。
>>150
どう動かしたいかが良く伝わらない。
マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの?
あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?
0152デフォルトの名無しさん
2007/12/27(木) 02:33:460153デフォルトの名無しさん
2007/12/27(木) 11:43:39読み込みさせたいのですが、
Do Until EOF(intFF)
をどうすればいいのかわかりません。
お願いします・・。
0154デフォルトの名無しさん
2007/12/27(木) 12:41:59これで目的の動作をするかどうかはわからないが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then
ActiveCell.Select
End If
End Sub
>>153
一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。
0155デフォルトの名無しさん
2007/12/27(木) 15:21:44ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。
ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては?
http://pc11.2ch.net/test/read.cgi/tech/1187667616/l50
0156デフォルトの名無しさん
2007/12/27(木) 15:59:23スレ違いの基準が分からんぽ
0157デフォルトの名無しさん
2007/12/27(木) 16:50:30いっそVB6スレと統合しろ
0158155
2007/12/27(木) 18:25:58>>2
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。
0159デフォルトの名無しさん
2007/12/27(木) 19:15:14初心者はわからんだろうしなあ
まあそのときの気分であしらってるけどね
0160デフォルトの名無しさん
2007/12/27(木) 19:16:58サンクスです。
0161デフォルトの名無しさん
2007/12/27(木) 19:19:39>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。
すべてこちらに包含するという考え方もある。
0162デフォルトの名無しさん
2007/12/27(木) 20:51:010163デフォルトの名無しさん
2007/12/27(木) 22:09:252chのルールやスレのルールを指摘するのは自治厨行為ではなく
逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について
0164デフォルトの名無しさん
2007/12/28(金) 02:04:110165デフォルトの名無しさん
2007/12/28(金) 09:36:53過去スレのどこかで、誰かが勝手にテンプレに入れただけ。
なので、あまり気にするな。
0166デフォルトの名無しさん
2007/12/28(金) 09:43:010167デフォルトの名無しさん
2007/12/28(金) 12:03:27on error gotoでmsgboxに行く仕様になっているため、
あと50000回くらいmsgboxをokし続けなければならない。
escを押しても、msgboxのok扱いにしかならない。orz
0168デフォルトの名無しさん
2007/12/28(金) 12:14:000169デフォルトの名無しさん
2007/12/28(金) 12:17:23終わってた。
0170デフォルトの名無しさん
2007/12/28(金) 12:27:460171デフォルトの名無しさん
2007/12/28(金) 12:31:090172デフォルトの名無しさん
2007/12/28(金) 12:34:4250000回押せばいいよな
0173デフォルトの名無しさん
2007/12/28(金) 12:48:51混じれ酢するとCtrl + Break
0174デフォルトの名無しさん
2007/12/28(金) 13:15:17こんなキー初めて使うわ
0175デフォルトの名無しさん
2007/12/28(金) 13:25:13押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。
0176デフォルトの名無しさん
2007/12/28(金) 15:12:43あたふたすることってありますよね。
0177\_____________/
2007/12/28(金) 16:11:29|/-O-O-ヽ| ブツブツ・・・
| . : )'e'( : . |
` ‐-=-‐
/ \
||\ ̄ ̄ ̄ ̄ ̄ ̄ \
||\\. \ ∧_∧
||. .\\ \ ( ;´Д`) (オイ、なんか変なのがいるぞ)
. \\ \ / ヽ.
. \\ / .| | |
. \∧_∧ (⌒\|__./ ./
( ´,_・・`)目合わせるなって ∧_∧
. _/ ヽ \ ( ) うわー、こっち見てるよ
0178デフォルトの名無しさん
2007/12/28(金) 18:52:13(D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが
0179デフォルトの名無しさん
2007/12/28(金) 18:53:12失礼。出直してきます
0180デフォルトの名無しさん
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では楕円の内部が
黒く塗りつぶされてしまいます。
ネットや本で調べてみたのですが、図形描画については記述があまり見つからず
私のスキルでは、難しそうです。
ご教授願えると助かります。
0181デフォルトの名無しさん
2007/12/28(金) 22:31:220182デフォルトの名無しさん
2007/12/28(金) 22:41:11さっそくの書き込みありがとうございます。
やってみたのですが、2007では図形描画は自動記録できないらしいです。
私の調べた範囲では、どうやらExcel2007の仕様らしいです。
したがって、自分でマクロを組むしかないらしいのですが・・・
0183デフォルトの名無しさん
2007/12/28(金) 22:59:59うーん、確かにその通りだった。ごめん。
ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・
0184デフォルトの名無しさん
2007/12/28(金) 23:02:29ちなみに"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)
0185デフォルトの名無しさん
2007/12/28(金) 23:06:15184の書き込みが、前後してすみません。
アドバイスありがとうございます。
ShapeRangeのプロパティについてヘルプを調べてみます。
0186デフォルトの名無しさん
2007/12/28(金) 23:31:32Selection.ShapeRange.Fill.Visible = msoFalse
を追加してもダメですか
0187デフォルトの名無しさん
2007/12/28(金) 23:41:45ありがとうございます。うちのパソコンはExcel2007が入っていないので
明日、職場で確かめてみます。
ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル
では、ちんぷんかんぷんです。
正直結構まいっています。
遅くまで、付き合ってくださってありがとうございます。
明日、結果を報告します。
0188デフォルトの名無しさん
2007/12/29(土) 01:32:16うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?
0189デフォルトの名無しさん
2007/12/29(土) 11:10:53おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。
0190デフォルトの名無しさん
2007/12/29(土) 11:38:282002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。
0191デフォルトの名無しさん
2007/12/29(土) 11:39:16ごばくった。なんとなく話題が似てた(笑
0192デフォルトの名無しさん
2007/12/29(土) 12:46:110193デフォルトの名無しさん
2007/12/29(土) 23:05:11昨日のアドバイスがヒントになって解決しました。
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
この2行を逆にしたらOKでした。ありがとうございました。
0194デフォルトの名無しさん
2007/12/30(日) 03:05:22CommandBotton1.visible=falseでも消えません。
CommandBotton1.BackStyle=0でも消えませんでした。
どのようにすれば消す、もしくは透明にすることができるのでしょうか?
よろしくお願いします。
0195デフォルトの名無しさん
2007/12/30(日) 03:26:42Excel2000で試してみたが、
フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?
0196デフォルトの名無しさん
2007/12/30(日) 04:15:290197デフォルトの名無しさん
2007/12/30(日) 04:24:05これなのですが、エラーがでてしまいます。
コマンドボタンを押したら、コマンドボタンを消す。
Private Sub CommandButton1_Click()
CommandBotton1.Visible = False
End Sub
0198デフォルトの名無しさん
2007/12/30(日) 04:25:09ちなみに、ワークシートのコマンドボタンです。
0199デフォルトの名無しさん
2007/12/30(日) 04:35:52解決しました。ありがとうございました。
0200デフォルトの名無しさん
2007/12/30(日) 11:34:38高級言語覚えたい気持ちもあるんだけど
今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな
高級言語にステップアップしていいことあるかな?
0201デフォルトの名無しさん
2007/12/30(日) 11:56:550202デフォルトの名無しさん
2007/12/30(日) 14:20:22実行がExcelに縛り付けられていることは、言語自体の話とは別。
0203デフォルトの名無しさん
2007/12/30(日) 15:23:09Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?
0204デフォルトの名無しさん
2007/12/30(日) 19:14:47玉の発射とかの解説してるサイトって無いですか?
というか、シューティングゲーム作成の解説のサイトで良いのですが
なかなか見付からない・・・
0205デフォルトの名無しさん
2007/12/30(日) 19:27:530206デフォルトの名無しさん
2007/12/30(日) 19:30:28学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w
素直に、マインスイーパみたいなヤツでいいと思うよ。
正直、オススメしないぞ。後で行き詰って困ることになる気がする。
ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。
0207デフォルトの名無しさん
2007/12/30(日) 19:42:39いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw
敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど
あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと
0208デフォルトの名無しさん
2007/12/30(日) 19:58:57利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。
そこで、いろいろと原因を探っているんですが、質問です。
シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか?
ご教授願います。よろしくお願いします。
0209デフォルトの名無しさん
2007/12/30(日) 20:07:39よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。
オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。
0210デフォルトの名無しさん
2007/12/30(日) 20:41:33�dクス
挑戦してみる^
0211デフォルトの名無しさん
2007/12/31(月) 10:27:560212デフォルトの名無しさん
2007/12/31(月) 10:41:25お疲れ様です
0213デフォルトの名無しさん
2007/12/31(月) 13:33:390214デフォルトの名無しさん
2007/12/31(月) 15:45:450215デフォルトの名無しさん
2008/01/01(火) 01:20:24If Dir(myPath) <> "" then
Kill myPath
End If
だとDir(myPath)がオープンしっぱなしになるそうです。
どう書けば閉じるのでしょうか?
0216デフォルトの名無しさん
2008/01/01(火) 02:36:50オープンもしてないモノを、どうしろと?
意味が分かってないなら、せめて本人に書き込ませろ。
ところで、あけおめ。
0217デフォルトの名無しさん
2008/01/01(火) 03:14:41解釈1
if FileExists("hoge") then Kill "hoge"
解釈2
myPath = "C:\TEST\*.xls"
TargetPath=Dir(myPath)
Do Until TargetPath= ""
Kill TargetPath
TargetPath=Dir()
Loop
オープンは関係ないけどこのどちらかがやりたいのではないかと予想
0218デフォルトの名無しさん
2008/01/01(火) 13:14:44どうすれば判定できますか?
ファイルをパスワードで開いてからだったら、
If ActiveWorkbook.WriteReserved Then
とかで判定できると思うのですが、パスワードは
不明でその有無だけ判定したいのです。
0219デフォルトの名無しさん
2008/01/01(火) 15:52:29知らないのか?
myPath = "C:\TEST\"
Dir(myPath)
RmDir myPath
してみろ。オープンされてるから
0220デフォルトの名無しさん
2008/01/01(火) 16:16:33>>208についてお願いしたいのですが・・・
0221デフォルトの名無しさん
2008/01/01(火) 18:29:49・・・・
RmDir myPath
そのまま実行してみろ
ヘルプ読んで出直せ
0222デフォルトの名無しさん
2008/01/01(火) 18:32:050223デフォルトの名無しさん
2008/01/01(火) 19:24:31ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。
保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。
これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。
0224デフォルトの名無しさん
2008/01/01(火) 20:45:141 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)で表示されてしまいます
0225デフォルトの名無しさん
2008/01/01(火) 20:53:20"問(i)"は、"問("&i&")"にする
0226デフォルトの名無しさん
2008/01/01(火) 21:05:59Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")")
にしたら出来ました^
即レスありがとうございました!
0227226
2008/01/01(火) 21:09:150228デフォルトの名無しさん
2008/01/01(火) 21:28:11そうですよね。VBAのテストをもっと増やしてみます。
ありがとうございます。
0229デフォルトの名無しさん
2008/01/01(火) 22:57:49このプログラムを実行すると
Dim commission As Integer
Sub test8()
commission = 90
If commission = 100 Then MsgBox ("手数料は100円です")
End If
End Sub
コンパイルエラー
End ifに対応するブロックがありませんというメッセージが出ます。
どこが悪いのでしょうか?
0230デフォルトの名無しさん
2008/01/01(火) 22:58:280231デフォルトの名無しさん
2008/01/01(火) 23:03:22神様ありがとう!!!
0232129
2008/01/02(水) 02:53:03すみません何をどうやったらいいのか全くわかりませんorz
とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします
0233デフォルトの名無しさん
2008/01/02(水) 04:29:21VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに
http://homepage1.nifty.com/h-fuji/excel_sample.htm
0234デフォルトの名無しさん
2008/01/02(水) 12:20:38お勧めは逆引きのやつとかですか?
他にいいのあります??
0235デフォルトの名無しさん
2008/01/02(水) 13:10:250236デフォルトの名無しさん
2008/01/02(水) 21:18:580237デフォルトの名無しさん
2008/01/02(水) 21:27:35まじっすか!?
とりあえず見てみるわ。
>>235
図書館にも死ぬほどあったw
0238かな
2008/01/03(木) 11:25:29セルつかうんじゃなくてちゃんと線を引いてやりたいんや?
0239デフォルトの名無しさん
2008/01/03(木) 12:43:460240デフォルトの名無しさん
2008/01/03(木) 13:59:10いろいろ試してみたんですけど
VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?
0241デフォルトの名無しさん
2008/01/03(木) 14:03:500242デフォルトの名無しさん
2008/01/03(木) 14:17:150243デフォルトの名無しさん
2008/01/03(木) 15:30:450244かな
2008/01/03(木) 15:32:360245デフォルトの名無しさん
2008/01/03(木) 15:56:290246デフォルトの名無しさん
2008/01/03(木) 16:04:370247デフォルトの名無しさん
2008/01/03(木) 16:05:530248デフォルトの名無しさん
2008/01/03(木) 16:06:370249デフォルトの名無しさん
2008/01/03(木) 16:10:190250デフォルトの名無しさん
2008/01/03(木) 16:21:410251デフォルトの名無しさん
2008/01/03(木) 16:28:390252デフォルトの名無しさん
2008/01/03(木) 16:39:240253デフォルトの名無しさん
2008/01/03(木) 17:02:32hoge:
'ここで何かする
Count = Count - 1
If Count >= 0 Then
Goto hoge
End If
0254デフォルトの名無しさん
2008/01/03(木) 18:34:000255デフォルトの名無しさん
2008/01/03(木) 18:35:55>>254って本気で言ってるのか?
0256デフォルトの名無しさん
2008/01/03(木) 20:18:11実際に開発する環境はXP excel 2003で
学習環境はvista excel 2007なんですが、
何か学習書を購入するとき、2007に対応したものじゃないと
理解は難しいのでしょうか?
2007に対応したVBA書はまだ少ないように感じるもので・・・
0257デフォルトの名無しさん
2008/01/03(木) 23:17:502007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。
0258デフォルトの名無しさん
2008/01/04(金) 02:25:11オブジェクトメンバ(VBA部分)は結構変わったよ
一応古いメンバにもアクセス出来るようにはなってるが
新しいメンバより動作が遅かったりというデメリットもある
2007用だと新しい体系に関しての説明が主になるだろうから
実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと
0259デフォルトの名無しさん
2008/01/04(金) 06:26:50マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。
ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか?
セルに入力しようとしている文字列
='D:\[計算書.xls]20.1月'!$J$3
計算書.xlsの20.1月は存在しません。
下記、3つは記述済みです。
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
0260256
2008/01/04(金) 07:26:44ありがとうございます。
詳しい解説があったほうがいいのでよく考えて選びます。
0261デフォルトの名無しさん
2008/01/04(金) 08:19:47うちは出ない (2000, 2003)
0262デフォルトの名無しさん
2008/01/04(金) 08:31:34どんなマクロを書いているんだ?
0263デフォルトの名無しさん
2008/01/04(金) 09:52:52再現した。 ワークシートの存在を確認するしかないかな?
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
あるいは、可能であればワークシート別のイベントで処理させるとか。
0264かな
2008/01/04(金) 09:57:330265デフォルトの名無しさん
2008/01/04(金) 10:43:44http://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
まぁ釣りだとは思うんだけど…
0267デフォルトの名無しさん
2008/01/04(金) 17:41:29複数のセルに数式が入れてあるのですが、
その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。
このようなことは可能でしょうか?
もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。
後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。
0268デフォルトの名無しさん
2008/01/04(金) 17:44:47EXCELの設定で表示しないようにできるんですかね・・・。
>262
NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る
~~~~~~
↑このシートは存在しない。
『シートの選択』ダイアログが表示される・・・。
>263
やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?
0269デフォルトの名無しさん
2008/01/04(金) 17:53:43つOn Error
0270デフォルトの名無しさん
2008/01/04(金) 22:16:05NW ?
0271263
2008/01/05(土) 11:58:51シート作る必要があるの?
どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ?
>>270
どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・
0272デフォルトの名無しさん
2008/01/07(月) 17:08:47この固定とは、保護等で管理者以外は触れないようにするということです。
ウィンドウの固定ではなく、改ページ範囲の固定です。
ご存知の方がいましたら、ご教授願います。
0273デフォルトの名無しさん
2008/01/07(月) 17:20:25結合したセルがあります。
そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、
入力のみ可能とすることはできますか?
ご存知の方がいましたら、ご教授願います。
0274デフォルトの名無しさん
2008/01/07(月) 20:01:110275デフォルトの名無しさん
2008/01/07(月) 23:30:12なんか簡単な方法ってないの?
0276デフォルトの名無しさん
2008/01/08(火) 08:29:16一応目的は達成されてるわけだよね
ではそれを提示してください
コード貼ってもブックをうpしても構いません
そしたらそれより簡単な方法があれば教えましょう
それが嫌ならさようなら
0277デフォルトの名無しさん
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
関数で同じことをやると出来るのですがゴミデータが出て、
コンマの数が変わってしまいます。
0278デフォルトの名無しさん
2008/01/08(火) 13:17:17文字列数値と数値の違いを理解しましょう
プロシージャ名と変数名を同じにするセンスを何とかしましょう
0279デフォルトの名無しさん
2008/01/08(火) 13:48:25セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)
0280デフォルトの名無しさん
2008/01/08(火) 14:13:45おお。
これをVBAで指定するには?
0281デフォルトの名無しさん
2008/01/08(火) 14:18:490282デフォルトの名無しさん
2008/01/08(火) 14:53:59転記するにしても、セル(範囲)ごと持っていけば済むよ。
Range("A1").Copy Range("A2")
0283デフォルトの名無しさん
2008/01/08(火) 15:06:19これで、解決・・・かな
0284デフォルトの名無しさん
2008/01/08(火) 15:24:410285デフォルトの名無しさん
2008/01/08(火) 23:22:13プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?
0286デフォルトの名無しさん
2008/01/08(火) 23:45:08LeftとTopを調整しましょう
コード教えては厳禁
0287デフォルトの名無しさん
2008/01/08(火) 23:50:48プログラムだけで可能なのですよね?
もう少しだけヒントをお願いできないでしょうか?
0288デフォルトの名無しさん
2008/01/08(火) 23:55:08Set ctrl = Me.Controls.Add("Forms.TextBox.1")
って感じに追加して、ctrlのプロパティを調整する。
MSFormsに追加するのに、これでいいのか?という気もするが。
0289デフォルトの名無しさん
2008/01/09(水) 00:14:18288さん有難う御座いました。
0290デフォルトの名無しさん
2008/01/09(水) 00:16:15寄生虫が増殖する
らしいです
0291デフォルトの名無しさん
2008/01/09(水) 00:33:430292デフォルトの名無しさん
2008/01/09(水) 14:20:420293デフォルトの名無しさん
2008/01/09(水) 14:30:400294デフォルトの名無しさん
2008/01/09(水) 14:36:580295sage
2008/01/09(水) 14:47:150296デフォルトの名無しさん
2008/01/09(水) 18:11:06Dim 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"も、ちゃんと残っていました。
これはなぜでしょうか?
0297デフォルトの名無しさん
2008/01/09(水) 18:25:52b=a
a=0
にしてもb=0にならないのと同じ
0298デフォルトの名無しさん
2008/01/09(水) 18:27:51set c1=nothingは、変数そのものへの操作で、変数が指す先にたいしては、
ほとんど影響しない。(唯一、リファレンスカウントにだけ影響するんだっけか。)
0299デフォルトの名無しさん
2008/01/09(水) 18:29:590300デフォルトの名無しさん
2008/01/09(水) 19:41:42オブジェクトの代入式の場合は、値を保存してある場所(参照)をコピーする。
なので、c1の要素を消すと、c2の要素も消えるが、
Set c1 = Nothing とした場合は、c1と値そのものとの関連が削除されるが、値そのものは残ってる。
全ての参照が削除された時点で、値そのものも削除される状態になる。
0301296
2008/01/09(水) 20:12:40>>299
>>300
レスありがとうございました。
よくわかった、つもりです。
次のような理解でよろしいでしょうか...
Set c1 = Nothing によって、変数c1に格納された参照は削除される。
しかし参照先の実体を、まだ変数c2が参照している。
そのため、実体はメモリ上に存続する。
このあとで更に、Set c2 = Nothing とすると、
実体を指す参照がすべて無くなる。
すると、その実体が自動的に解放される。
0302デフォルトの名無しさん
2008/01/09(水) 21:28:25セルの値(自動で変化する)が変わった瞬間に所定のコードを実行する(JavaScriptでいうところのonchange見たいな)、
と言うのは如何すればいいんでしょうか?
0303デフォルトの名無しさん
2008/01/09(水) 21:40:070304デフォルトの名無しさん
2008/01/09(水) 22:57:14�dクスです
なるほど、ワークシート単位ではチェンジイベントがあるんですね。
早速やってみます。
0305デフォルトの名無しさん
2008/01/10(木) 13:29:04末尾に並ぶ0の個数を求めるのをVBAでおながいします
0306デフォルトの名無しさん
2008/01/10(木) 13:47:41>>305→>>2★4
0307デフォルトの名無しさん
2008/01/10(木) 13:51:31というか桁数が膨大になるので計算機を使っても無理かと。
代数的な解法があるんじゃないですか?数学板の質問スレに質問しては?
0308デフォルトの名無しさん
2008/01/10(木) 14:02:100309デフォルトの名無しさん
2008/01/10(木) 14:07:59アルゴリズム次第では桁数は膨大にならないよ
だって総桁数を調べるのではなく、0の数を数えるだけだから
なんにしろスレ違いだけど
0310デフォルトの名無しさん
2008/01/10(木) 15:05:43網のようなラインが消えないのですが、これをvba内で
解除するにはどうすればいいでしょうか。
0311デフォルトの名無しさん
2008/01/10(木) 15:26:51Application.CutCopyMode = False
これはちゃんとExcel VBAの質問だな
0312sage
2008/01/10(木) 15:31:47お、早速
ありがとうございます
0313デフォルトの名無しさん
2008/01/10(木) 16:28:251列目 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まで集計してしまって困っています
0314デフォルトの名無しさん
2008/01/10(木) 16:39:34Sub 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
0315デフォルトの名無しさん
2008/01/10(木) 18:11:37ピボットテーブルレポート使ってみて。
0316デフォルトの名無しさん
2008/01/10(木) 19:41:52とついてる場合
range("hoge").value = "ほげほげ"
と操作できますが
この名前 "hoge" の行 列の値を得る方法を
教えて下さい hogeが(1,5)なら
int row = 1
int col = 5
のように得たいです。
0317デフォルトの名無しさん
2008/01/10(木) 19:56:30Range("hoge").Column
0318デフォルトの名無しさん
2008/01/10(木) 23:06:12Public Type SyainData
Id As Long
Name As String
End Type
Dim Kyo(5) as SyainData
と宣言しループ処理で関数の引数として2番目のNameを渡したいのですがどうすればいいですか?
0319デフォルトの名無しさん
2008/01/10(木) 23:19:010320デフォルトの名無しさん
2008/01/10(木) 23:23:030321デフォルトの名無しさん
2008/01/10(木) 23:26:15ちなみにAユーザーフォームからNameに入力して
標準モジュールに定義してある構造体にそれぞれ格納した値をBユーザーフォームに出力したいのです。
0322デフォルトの名無しさん
2008/01/11(金) 00:19:38判断する情報が少なすぎる。
0324デフォルトの名無しさん
2008/01/11(金) 10:14:12数字が表示されるエラーはなんですか?
0325デフォルトの名無しさん
2008/01/11(金) 14:21:130326デフォルトの名無しさん
2008/01/11(金) 14:33:31>>325はどうでもいいです
VBAを含むxlsを「共有」した途端に、そのvbaの挙動が微妙に変わってしまいました。
vbaの内容は、セル範囲をrangeで指定して、最下行にペーストするだけなんですが・・・。
なんか、ちょっとずれる感じなんです。ウィンドウの固定が原因かも。
共有と同時にVBAがロックされるので、原因の確かめようが無い状態(T-T
0327デフォルトの名無しさん
2008/01/11(金) 15:27:540328326
2008/01/11(金) 16:19:52こればっかりはどうしようもないですかね
保護されたセルに書き込むというのはvbaで何とかなりましたが・・・
0329デフォルトの名無しさん
2008/01/11(金) 16:48:30つAssistant
0330デフォルトの名無しさん
2008/01/11(金) 18:07:53なるほど、カイル君が使えるんですね・・・
ありがとうございます
0331デフォルトの名無しさん
2008/01/11(金) 19:37:54このスレはオマイの進捗報告書かと
0332デフォルトの名無しさん
2008/01/12(土) 13:39:08VBA-Editorからの実行は正常で、ワークシート上のコマンドボタンからの実行だと
時々、Excelが強制終了します。
コードは変えていないのに、上記の状況が発生しないときもあります。
バグだと思うのですが、発生しない時もあるので、原因がつかめません。
そんな事ってありますか?
0333デフォルトの名無しさん
2008/01/12(土) 13:49:06あるよ。何か、以前にも出てたと思う。
クラスをインプリメントして、何かややこしいことしようとしてるヒトが居て、
エラーが出たり出なかったりするという話があった。基本的にはそれと同じ系統の問題では?
0334デフォルトの名無しさん
2008/01/13(日) 01:40:25以下のコードは、都道府県ごとに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
0335デフォルトの名無しさん
2008/01/13(日) 01:45:30Dim 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←死ね
0336デフォルトの名無しさん
2008/01/13(日) 04:26:190337デフォルトの名無しさん
2008/01/13(日) 05:08:470338デフォルトの名無しさん
2008/01/13(日) 05:10:22随分酷いコードだな
VBA始めて3日くらいの奴が書いたコードだろ
こんな下劣なコードの説明なんてまっぴらだぜ
0339デフォルトの名無しさん
2008/01/13(日) 14:25:580340334
2008/01/13(日) 14:39:48わかる方のみでお願いします。
0341デフォルトの名無しさん
2008/01/13(日) 14:58:48どうもすみません・・。
0342デフォルトの名無しさん
2008/01/13(日) 15:17:230343デフォルトの名無しさん
2008/01/13(日) 15:18:17判るんだけどさぁ、それを説明するのはスレ違いだし、そもそも野暮だろ?
0344デフォルトの名無しさん
2008/01/13(日) 15:56:320345デフォルトの名無しさん
2008/01/13(日) 16:01:13大事なのは写真だ
0346デフォルトの名無しさん
2008/01/13(日) 16:06:191行ずつ説明が必要とかいう時点でおかしいと思わないか?
Dim i As Integerにも説明が必要なのか?どのレベルでだ?
Dimが何を意味して、Integerが何を意味するかまで解説するのか?
あるいは内部でIntegerがどのように管理されているかまで必要か?
処理ってのはある程度の塊で説明するのが普通だろ?
「ここはクラスの平均点を計算する」みたいな感じでよ。
文法がわからないのであれば入門書買うなりググるなりすればいい。
ピンポイントなら教えてやれても全部教えろとか金取りたくなるわ。
0347デフォルトの名無しさん
2008/01/13(日) 16:07:50動画だ。動画をよこせ。
0348デフォルトの名無しさん
2008/01/13(日) 16:11:570349デフォルトの名無しさん
2008/01/13(日) 21:03:19ウィンドウハンドルを取得するには、どうすればよろしいでしょうか?
APIを使って行うと思いますが、Excel本体やユーザーフォームのウィンドウハンドルの取得であれば
ググれば出てきたのですが、組み込みダイアログボックスのウィンドウハンドルの取得は
見つけることができなかったので、よろしくお願いします。
0350デフォルトの名無しさん
2008/01/13(日) 21:15:020351デフォルトの名無しさん
2008/01/14(月) 06:14:32i=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
0352デフォルトの名無しさん
2008/01/14(月) 07:47:130353デフォルトの名無しさん
2008/01/14(月) 08:10:03やさしいにもほどがあるな
0354デフォルトの名無しさん
2008/01/14(月) 09:41:330355デフォルトの名無しさん
2008/01/14(月) 10:18:46結局、自分自身の頭の整理をしてるんだろうな。
0356デフォルトの名無しさん
2008/01/14(月) 10:53:34君たち気持ち悪いよ。
0357デフォルトの名無しさん
2008/01/14(月) 11:21:530358デフォルトの名無しさん
2008/01/14(月) 11:31:160359デフォルトの名無しさん
2008/01/14(月) 11:48:280360デフォルトの名無しさん
2008/01/14(月) 13:42:05求めてる答えがあれなら質問の意味がないと思うぞ
0361デフォルトの名無しさん
2008/01/14(月) 14:04:340362デフォルトの名無しさん
2008/01/14(月) 18:30:100363デフォルトの名無しさん
2008/01/14(月) 18:50:090364デフォルトの名無しさん
2008/01/14(月) 18:58:48ごきぶりほいほい
0365デフォルトの名無しさん
2008/01/14(月) 20:43:590366デフォルトの名無しさん
2008/01/14(月) 22:43:08> 質問スレって所で
そう、ここは質問スレであって、
自社商品を購入してくれた顧客相手のサポートセンターでも
受講料を支払ってくれた生徒相手のスクールでも無い
0367デフォルトの名無しさん
2008/01/14(月) 23:14:230368デフォルトの名無しさん
2008/01/14(月) 23:15:240369デフォルトの名無しさん
2008/01/14(月) 23:21:180370デフォルトの名無しさん
2008/01/15(火) 00:05:330371デフォルトの名無しさん
2008/01/15(火) 00:41:49OS: xp pro
EXCELバージョン :2003
RGB値を使いセルの塗りつぶしを行いたいと思い、
Cells(1, 1).Interior.Color = RGB(227, 229, 223)と記述しました。
しかし実際セルの色を見てみるとまったく違う色が塗られていました。
色を解析するソフトでその色のRGB値を調べてみるとRGB(204,255,204)でした。
もうわけわかりません、アドバイスお願いします。
0372デフォルトの名無しさん
2008/01/15(火) 00:51:12RGB(255, 0, 0)なら赤になるか?
なるならcells( i, j )にRGB( i, j, 0 )を入れたときに正しいグラデーションになるか?
RGB解析ソフトでRGB(255, 0, 0)等が正しく読み取れるか?
これくらい試してみてくれないか?
0373デフォルトの名無しさん
2008/01/15(火) 01:21:22ありがとうございます、試してみました。
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
ツール→オプション→色で表示したい色を追加すると表示できました。
これ以外には方法はないのでしょうか?
0374デフォルトの名無しさん
2008/01/15(火) 01:25:01エクセルは全てパレット管理。
パレットの色しか表せない。パレット以外の色をVBA等で選んでも近いパレットの色を使用させられる。
↓
すなわちパレットを変更すればいい
>ツール→オプション→色で表示したい色を追加すると表示できました。
>これ以外には方法はないのでしょうか?
その表示できた方法をマクロの記録で記録してやればいい。
0375デフォルトの名無しさん
2008/01/15(火) 01:46:21解決できました、ありがとうございました。
0376デフォルトの名無しさん
2008/01/15(火) 11:36:29ありがとうございました!
0378デフォルトの名無しさん
2008/01/15(火) 14:45:050379デフォルトの名無しさん
2008/01/15(火) 18:52:50ぷっっ て、ところだけど、何をききたいのか、言ってみたら。
折れが笑ってあげるからw
0380379
2008/01/15(火) 20:05:120381デフォルトの名無しさん
2008/01/15(火) 20:49:36おまい、アンカーもようつけんで、・・・www
0382379
2008/01/15(火) 20:52:47は偽者です。
0385デフォルトの名無しさん
2008/01/16(水) 01:17:42>>>334=377
いいえ、等しくありません。
0386デフォルトの名無しさん
2008/01/16(水) 10:06:13どうでもいいが、RGB()関数って256を指定してもエラーにならないのか、知らなかった。
0387デフォルトの名無しさん
2008/01/16(水) 13:00:24Bの100個の項目のなかからAの項目30に該当するものをそのままAのデータに代入したい
ということを考えています。ワークシート上で行う場合はlookup関数を使えばよいのですが
マクロのままで高速に行う方法はないものでしょうか?
ワークシート関数を使ったとしても一度ワークシートにデータを書き出さなければ
つかえないのでしょうか?色々調べても分からなかったので
どなたか御教示頂けると嬉しいです。
0388デフォルトの名無しさん
2008/01/16(水) 13:26:11ん? というか、既に処理を書いてるんだったら、
VBAで処理してからワークシートに吐いた方が、そりゃ若干早いはずだと思うが。
0389デフォルトの名無しさん
2008/01/16(水) 13:46:00B100個の項目の一部でAの30個の項目と重複しているものを検索、抽出して
Aの該当する項目のデータとして代入しようとしています。
ワークシートの上でやるのなら、lookup関数をつかえば良いのでしょうが
ワークシートを一切いじらずに配列の内部処理だけで同様な操作を高速に
できないかと悩んでいる次第です。
0390デフォルトの名無しさん
2008/01/16(水) 14:21:54Dim 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
こういう事かな?
この程度の個数ならワークシートでやってもほぼ一瞬だと思うけど。
0391デフォルトの名無しさん
2008/01/16(水) 17:41:03セル[A2:C2]に英語・数学・国語の得点が入っている。合計点を計算し、
セル[D2]に入れるマクロを作成しなさい。
また、合計点が270点以上の時には「大変よくできました」、
180〜269点のときには「よくできました」、
180点未満のときには「がんばろう」というメッセージをセル[E2]に表示しなさい。
英語の得点は90点
数学の得点は85点
国語の得点は100点 とする。
よろちくね。
0392デフォルトの名無しさん
2008/01/16(水) 18:03:29それは質問とは言わないような・・・。
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
0393デフォルトの名無しさん
2008/01/16(水) 19:17:08少なくとも他人にコードを渡すときは
0394デフォルトの名無しさん
2008/01/16(水) 21:49:52一旦5.0で保存したら軽くなったんだけどまともに動かなくなるし。
これから2007が標準になっていくのかと思うと憂鬱だ。
0395デフォルトの名無しさん
2008/01/16(水) 21:59:19自宅の自前PCも、2000のまま。サポートし続けろよ>MS
0396デフォルトの名無しさん
2008/01/16(水) 22:02:13メインストリーム サポート : 2004 年 6 月 30 日終了
延長サポート 期間 : 2004 年 7 月 1 日から 2009 年 7 月 14 日まで
(修正プログラム サポートには最新のサービス パックがインストールされている必要があります)
0397デフォルトの名無しさん
2008/01/17(木) 10:00:49やりたいことはそういうことなのですが、
その書き方だと要素が膨大になった時は明らかに遅くなると思います。
VBA上で高速に行う書き方などご存知ありませんでしょうか?
0398デフォルトの名無しさん
2008/01/17(木) 10:22:24アルゴリズム的な話なら、手法はいろいろあるが、「VBA上で高速に行う書き方」ではなく
「VB言語で高速に行う書き方」になるので、例えExcelでやるとしてもスレ違いだよ >>2★3★4
0399デフォルトの名無しさん
2008/01/17(木) 11:14:43参照される側(ここでは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
0400デフォルトの名無しさん
2008/01/17(木) 11:51:13簡単に言いますと1つのシートに47個のシートを入れたいです。
よろしくお願いします
0401デフォルトの名無しさん
2008/01/17(木) 12:51:36ありがとうございます。
0402デフォルトの名無しさん
2008/01/17(木) 20:37:20>1つのシートに47個のシートを入れたいです。
意味不明
1つのブックに47個の県別シートを作りたいという意味なのか?
逆に県別に47個あるシートから1つのdataって言う名前のシートに集計したいってことなのか?
どのセルに何をどういう条件で集計するのかも書いていない。
0403デフォルトの名無しさん
2008/01/17(木) 22:54:26調べたのですがよくわかりませんでした。
0404デフォルトの名無しさん
2008/01/17(木) 23:16:070405デフォルトの名無しさん
2008/01/18(金) 00:46:520406デフォルトの名無しさん
2008/01/18(金) 01:31:22404.405さん以外のやり方を探しているのですがEarseの使い方やZreoMemoryの使い方がわからないです
0407デフォルトの名無しさん
2008/01/18(金) 02:43:12そりゃそうでしょう、そんなものありませんから。
0408デフォルトの名無しさん
2008/01/18(金) 08:27:07その辺の仕様はVB6と一緒です
つまり>>2★3★4
0409デフォルトの名無しさん
2008/01/18(金) 11:59:04調べて、結果を返す方法は無いでしょうか。
0410デフォルトの名無しさん
2008/01/18(金) 12:20:06Workbook.MultiUserEditing で調べられるけど、これはVBAだからダメってこと?
0411デフォルトの名無しさん
2008/01/18(金) 12:25:450412デフォルトの名無しさん
2008/01/18(金) 12:31:44いえ、multiuserediting の存在を知りませんでした・・
0414デフォルトの名無しさん
2008/01/18(金) 18:11:230415デフォルトの名無しさん
2008/01/18(金) 19:41:23'-----------------------------
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のないシートをはさまずに開放する方法ありませんでしょうか。
0416デフォルトの名無しさん
2008/01/18(金) 20:16:17クリックされた項目と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の構文を使えば良いのでしょうか?
色々調べてみても判らずどなたかアドヴァイス頂けると嬉しいです。
0417デフォルトの名無しさん
2008/01/18(金) 22:25:58VBAで、あるセル範囲にある数式の答えを出力するにはどうすればいいんでしょうか?
Range("A1:A5")="b2/2+b5"みたいにすると数式がそのまま出力されるし・・・
0418デフォルトの名無しさん
2008/01/18(金) 22:31:50それが初歩的だとわかるぐらいならじゅうぶん中級車さ
0419デフォルトの名無しさん
2008/01/18(金) 22:32:42ループが入れ子になってると思う。
監視処理を各シートにを書くんじゃなくて、どこか一枚に
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"
0420デフォルトの名無しさん
2008/01/18(金) 23:11:24DoEvents ステートメントは、ウィンドウズメッセージとイベントプロシージャの処理が終わるまで
戻ってこないから、多分、AのDeactivate⇒即座にBのActivateが走ってる状態。
ちょっと構造を見直した方がいいかもね。
0421デフォルトの名無しさん
2008/01/19(土) 17:14:35普段は、VBエディタから 挿入 → 標準モジュール で
Module** といったファイルを作成してコードを書いています。
このModule** というファイルを自分の好きな名前にするのにはどうしたら良いのでしょうか?
0422デフォルトの名無しさん
2008/01/19(土) 17:25:270423421
2008/01/19(土) 19:16:55ご解答ありがとう御座います。
しかし、右クリックしても「名前を変更」が見つかりません。
また、F2ではオブジェクトブラウザという表示になるのですが
名前を変更する方法がわかりません。
分かる方みえましたらお願いします。
0424デフォルトの名無しさん
2008/01/19(土) 19:22:37プロパティウィンドウ→オブジェクト名を変える
0425デフォルトの名無しさん
2008/01/19(土) 19:23:18プロパティウィンドウの、(オブジェクト名)を変更すると変わる。
0426416
2008/01/19(土) 21:26:44また基本的な質問ですみませんが
マクロを起動した瞬間にリスト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()等に
書いた時は表示されるのですが
一体何が誤っているか御指摘頂けませんでしょうか?
0428デフォルトの名無しさん
2008/01/19(土) 21:56:53そのコードをそのままこちらで実行してみたけど、問題なく動いたよ。
何か別の場所でミスしてるんでは?
例えば、
値を表示させたいリストボックスのオブジェクト名が ListBox2 ではなく ListBox1 だった、とか
代入元のセル A1:A5 の値がマクロ起動時には空白だった、とか。
今一度、確認すべし。
0429質問
2008/01/19(土) 22:40:54操作パネルが統合されなくなってしまいました。
どうすれば元通りにできるでしょうか?よろしくお願いします!
http://members.at.infoseek.co.jp/skypp/AAAAA.jpg
0430デフォルトの名無しさん
2008/01/19(土) 23:08:09だとgeneralになっていたので
Private Sub UserForm_initialize()
に直すとUserFormになって動きました。
作ってるのはUserForm1なのに不思議ですね。
ともかく有難うございました。
0431デフォルトの名無しさん
2008/01/19(土) 23:51:21画面のコントロール以外(フォーム、クラス等)のイベントプロシージャ名は、
オブジェクト名に影響されないハズなんだけどね。何でだろ?
でも、言われてみれば違和感あるよな。今気づいたw
0432429
2008/01/19(土) 23:52:15プロジェクトエクスプローラで「ドッキング可能」にしたら直りました。
下記にも載ってました(^^)
http://www2.moug.net/bbs/exvba/20071226000034.htm
0433デフォルトの名無しさん
2008/01/19(土) 23:52:47メニューの、ツール ⇒ オプション ⇒ [ドッキング] タブ を確認してみて。
0434デフォルトの名無しさん
2008/01/20(日) 00:16:4647個あるシートから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
0435デフォルトの名無しさん
2008/01/20(日) 00:28:12祈われるまでもなく幸ねぇよw
>>400
もうちょい詳しく書かないと失礼だぞぅ
0436デフォルトの名無しさん
2008/01/20(日) 00:30:46のような一枚のワークシート上の範囲だけでなのでしょうか?
1枚目のRange(Cells(1, 1), Cells(5, 4))と2枚目のなんたらのように
別のsheetにわたった範囲の格納などしたい場合はどうすればいいのでしょう
0437デフォルトの名無しさん
2008/01/20(日) 00:57:59それは無理。 クラスの概念を知らないと分からないかもしれないけど。
別々の変数に持たせるしかないと思う。もちろん、配列やコレクションは使えるはず。
0438デフォルトの名無しさん
2008/01/20(日) 20:46:37Application.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
0439デフォルトの名無しさん
2008/01/20(日) 20:48:04Range("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
0440デフォルトの名無しさん
2008/01/20(日) 20:49:08n = 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
0441デフォルトの名無しさん
2008/01/20(日) 21:03:23Application.ScreenUpdating = False
Application.ScreenUpdating = True
↓
Application.EnableCalculation = False
Application.EnableCalculation = True
0442デフォルトの名無しさん
2008/01/20(日) 21:22:32再計算しない場合はそんなのあるのか、ありがとう。
でも、変えてみたけど実行時エラーでてだめだった、
ワークシートで再計算してるから使えないのか
ワークシートの再計算はそのままで画面の更新だけ止めるのはできないのかな
0443441
2008/01/20(日) 22:05:30続けての回答を待っているといけないから、折れには以後書くことはないと伝えておくよ。
あと、折れが使うのは
Application.EnableEvents = False (と True)
Application.Visible = False (と True)
0444デフォルトの名無しさん
2008/01/20(日) 22:17:22いろいろありがと
新しいこと少し覚えられてよかったw
まあ、うまくいかなかったけど趣味で使ってるだけだから
そのうちできるようになると思うのでゆっくりやります
0445デフォルトの名無しさん
2008/01/20(日) 23:58:30全くためしてないんだが
Application.ScreenUpdating = 画面の更新をするか
Application.EnableCalculation = 再計算してるか
を考えれば幸せになるんじゃね?
俺的には全部コードでやっちゃうがw
0446441
2008/01/21(月) 01:01:55application.run関係ぐらいしか実行時エラーが出うる箇所はないように見えた。
もしかしたらだけど、ここが参考になるかも
ttp://www.geocities.jp/happy_ngi/YNxv9cz56.html
おやすみ
0447デフォルトの名無しさん
2008/01/21(月) 01:59:57>>446
ありがとうございます。
441さんの指摘のようにapplication.runが原因みたいです
Excelの分析ツール使うと画面更新されてしまうみたいです
ワークシート上だけで乱数関数使って同じようなコードで実行したら、
画面は更新されないでうまくいきました。
鋭い指摘ありがとう!
0448デフォルトの名無しさん
2008/01/21(月) 15:40:17rangeを使わず、offsetを使って指定することは可能でしょうか。
やりたいことをイメージ化すると以下のようなのですが・・・
Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2).Select, ActiveCell.Offset(10, 10).Select).Select
End Sub
0449デフォルトの名無しさん
2008/01/21(月) 15:58:59いちいちこのスレで聞くよりもさ、
自分でググるなり本を買うなりして調べた方が圧倒的に早いと思うんだけど。
0450デフォルトの名無しさん
2008/01/21(月) 16:09:36range(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
0451デフォルトの名無しさん
2008/01/21(月) 16:10:15つか、目的がよくわかんねーよ。 あと、その例文、.Offset に .Select付いてたらエラーになるぞ。
そもそも、Offset って、基本的にRangeのプロパティなんだが。Rangeを使わずにどうしろと?
0452デフォルトの名無しさん
2008/01/21(月) 16:57:48スルーしろ
End If
0453デフォルトの名無しさん
2008/01/21(月) 17:01:03それとも、どこが分からないか、こちらが分かりやすく優しく丁寧に質問しないとダメなのかよ?
0454448
2008/01/21(月) 17:19:29Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2), ActiveCell.Offset(10, 10)).Select
End Sub
selectとったらいけました。
逝ってくる
0455デフォルトの名無しさん
2008/01/21(月) 17:56:47やりたいことの「イメージ」って書いてるだろ。
これで意図がわからんというのがわからん。
0456デフォルトの名無しさん
2008/01/21(月) 20:42:560458デフォルトの名無しさん
2008/01/21(月) 23:47:53Kouzoutai(1,2).Member = 1
という形であってます?
オブジェクトが必要ですとかいうエラーが返ってくるんですが…
0459デフォルトの名無しさん
2008/01/21(月) 23:59:26もう思いついたことをとりあえず質問するスレになってるな。
>>458なんてはなっから自分で調べる気ないもんな。
0460デフォルトの名無しさん
2008/01/22(火) 00:30:46オブジェクトがないんだよ。
Dim Kouzoutai( 5, 5 ) as HOGE
って形になってるか?
どうせ
Type Kouzoutai
Member as integer
End Type
とかになってんだろ。
「VBA 構造体」でググればびっくりするくらいヒットするじゃないか。
0461デフォルトの名無しさん
2008/01/22(火) 07:24:11Excelは2003の11.8169.8172です。
VBA初心者でここも初めてです。質問させてください。
2種類のグラフをそれぞれ別のシート上のオブジェクトとして作成しました。
(2つ同時ではなく、まず1つ目のグラフを作り、その後別のグラフを作るというやり方です。)
2つ目のグラフを作る際、1つ目のグラフの数値軸で自動的に表示された軸の最大値と最小値を
2つ目のグラフにも反映させたい(同一の値にしたい)のですが、
どのように記述すれば1つ目のグラフの最大値や最小値を呼び出すことができますか?
With ActiveChart.Axes(xlValue)
.MinimumScale = ココと
.MaximumScale = ココです。
End With
ぜひヒントがほしいです、よろしくお願いします。
0462デフォルトの名無しさん
2008/01/22(火) 12:59:28確認する時間がないのでヒントのみ。 あとはヘルプ見ながら直して。
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 な感じで対応する値が取得できると思われ。
まとめて書くこともできるが、とりあえず入力補助に反応する書き方にしといた。
0463デフォルトの名無しさん
2008/01/22(火) 13:25:13Dim 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
0464デフォルトの名無しさん
2008/01/22(火) 13:31:48日本語でやりたいことを書け
0465デフォルトの名無しさん
2008/01/22(火) 13:38:05に観光客の人数を入力したのですが、これを小さい順に書き換えるにはどうし
たらいいのですか?
0466デフォルトの名無しさん
2008/01/22(火) 13:46:130467デフォルトの名無しさん
2008/01/22(火) 18:25:19IFでセル内容を指定してから
Range.deleteでどうやって削除条件にすべきでしょうか。
0468デフォルトの名無しさん
2008/01/22(火) 20:22:560469デフォルトの名無しさん
2008/01/22(火) 22:05:120470デフォルトの名無しさん
2008/01/22(火) 22:13:250471デフォルトの名無しさん
2008/01/22(火) 22:49:21お前がなw
0472デフォルトの名無しさん
2008/01/22(火) 23:03:330473デフォルトの名無しさん
2008/01/23(水) 11:53:110474デフォルトの名無しさん
2008/01/23(水) 18:41:55ビデオカードの現在の解像度(できればモニタのインチ数も)によって、
ActiveWindow.Zoomの値を変更するプログラムを考えているのですが、
vbaでビデオカードの現在の解像度を調べるのは不可能でしょうか?
0475デフォルトの名無しさん
2008/01/23(水) 21:16:04vba api 解像度 でぐぐれば、2番目にあなたの望む回答が
0476デフォルトの名無しさん
2008/01/24(木) 08:57:540477デフォルトの名無しさん
2008/01/24(木) 09:11:24ありがとうございます!
下調べはしてたつもりだったのですが、
甘かったです・・・orz
0478デフォルトの名無しさん
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だった場合は、そのファイルが無いか、またはその名がディレクトリである事を示している。
0479デフォルトの名無しさん
2008/01/24(木) 10:06:39申し訳ありません、スレ違いでした。
失礼致しました。
0480デフォルトの名無しさん
2008/01/24(木) 10:33:36アクセスのVBAで、フォーム1
ユーザ登録画面
ユーザ名[ ]
パスワード[ ]
登録
があり、2つを入力し、登録を押したら登録できるのを教えてください
0481デフォルトの名無しさん
2008/01/24(木) 10:37:07何度もすみません。もうこのスレに書いてしまったので、
ほかのスレに書いたら、マルチポストとか云うのに
なってしまいますので、もしよろしければこのスレで
教えて頂けないでしょうか?
0482デフォルトの名無しさん
2008/01/24(木) 11:04:47誤爆はマルチにはならないと思うよ。
マルチポストだって言うヤツは居るかもしれんが、普通に教えて貰えると思う。
俺も多少は分かるけど、このスレで回答したくない。回答が違ってても突っ込みがなさそうだから。
0483デフォルトの名無しさん
2008/01/24(木) 11:06:44ありがとうございます。
助かりました。
0484デフォルトの名無しさん
2008/01/24(木) 12:07:30出来る事が分かったのですが、もっと簡単な方法がありますでしょうか?
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
0485デフォルトの名無しさん
2008/01/24(木) 17:23:24"地域A"というシートから魚名前を検索して個数(魚の名前の2つ下のセル)と総量(個数のセルの1つ右)の数値を
台帳(以下の記述ではシート名”漁獲量”)シートの各魚の行に転記させたいのですが、
一生懸命ヘルプやネット検索しながら自己流で記述しましたが
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
と出ます。
どなたか正しい記述をアドバイスしていただけませんでしょうか?
0486485
2008/01/24(木) 17:24:49Dim 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
0487485
2008/01/24(木) 17:25:54For 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
0488デフォルトの名無しさん
2008/01/24(木) 17:55:01ちょっと突っ込みどころが多すぎるので、全部回答はできないんだけど、
まだ基本を分かりきってないみたい。
とりあえず、 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の使い分けが混乱してるかな。
0489485
2008/01/24(木) 18:00:49どうもありがとうございます!!
突っ込みどころ満載ですか…笑
ご指摘を元に再度勉強してがんばってみます!!
0490488
2008/01/24(木) 18:30:38ゴメン、もっと重要なポイントがあった。
wrkC = .Range("A1").Resize(1, wrkA) は、オブジェクト型変数への代入になるので、
Set wrkC = .Range("A1").Resize(1, wrkA) という書式を必ずとること、です。
0491デフォルトの名無しさん
2008/01/25(金) 09:36:510492デフォルトの名無しさん
2008/01/25(金) 23:56:11普通の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
0493デフォルトの名無しさん
2008/01/26(土) 01:11:110494デフォルトの名無しさん
2008/01/26(土) 17:35:21Me.Controls.Add("Forms.textbox.1","品名",True)
のFormsって一体何なのですか?
0495デフォルトの名無しさん
2008/01/26(土) 17:48:240496デフォルトの名無しさん
2008/01/26(土) 17:52:19Microsoft Forms 2.0 TextboxのPROGID
0497デフォルトの名無しさん
2008/01/27(日) 13:51:07その目的セルの評価値を計算する際に、さらにソルバを実行したいです。
(つまりソルバの2重ループになる感じ)
が、これを実現できなくて困っています。
考えてたのは、内側のループのソルバ部分を関数にして
ワークシートから呼び出せるようにして、
それを外側ループのソルバの目的セルの数式に放り込んでやればいい、
という方法なんですけど、
VBAのFunctionの中でソルバをまわそうとすると
シート上の値を書き換えなければならないのでエラーになってしまいます。
かといってそれをサブプロシージャにしても
ワークシート上の数式として表せないので、
結局外側のループで使えません。
何とかこれを達成する妙案はないですかね…
達成したとしても重くて不安定にはなると思うんですが、
それは承知の上です。
環境はWinXP SP2+Excel2000です
0498デフォルトの名無しさん
2008/01/27(日) 13:57:520499デフォルトの名無しさん
2008/01/27(日) 14:03:45どのへんがおかしいんでしょう?
それすらわからんです
0500デフォルトの名無しさん
2008/01/27(日) 18:11:32ttp://www.joy.hi-ho.ne.jp/ngchsny/xevious_sol.jpg
0501デフォルトの名無しさん
2008/01/27(日) 23:00:39OnErrorでエラーメッセージの出力を指定しても、
エラーだとそのエラーで無事処理は終わるのですが、
本来エラーにならない場合でも、エラーメッセージ出力→正常処理 となるんですけど。
何か原因は考えられますか?
(プログラム持ち出せないのでここに書けないのです)
0502デフォルトの名無しさん
2008/01/27(日) 23:16:080503デフォルトの名無しさん
2008/01/28(月) 00:09:18On Error で飛ぶタグの前に Exit Function を書いてなかった、とか言ったら頃すぞ?
0504デフォルトの名無しさん
2008/01/28(月) 00:49:260505デフォルトの名無しさん
2008/01/28(月) 01:15:06ネタや回答の一つも返さず、つまらんマジツッコミを入れるとは一体どういう了見か?
0506デフォルトの名無しさん
2008/01/28(月) 01:16:04金払って許してもらおうぜ
0507デフォルトの名無しさん
2008/01/28(月) 10:02:19超きもちいい
0508501
2008/01/28(月) 12:59:32On Error Msgbox
On Error exit Sub
で、以下正常時の処理を記述しているのだが。
Exit Function書くとエラーが出る。
0509デフォルトの名無しさん
2008/01/28(月) 13:09:09そもそもそれコンパイル通るの?
↓なら問題ないと思うけど。
Privete Sub 処理()
On Error GoTo ラベル
(通常処理)
Exit Sub
ラベル:
(エラー処理)
End Sub
0510デフォルトの名無しさん
2008/01/28(月) 16:54:46Dim 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にした方がいいんでしょうか?
きちんと動くには動くのですが、ちょっと不安になったもので教えてください。
0511デフォルトの名無しさん
2008/01/28(月) 17:48:36その程度のものを分ける必要があるか知らんが、ByValは無意味。
そこはそのまんま参照渡しが正解。
それよりFunctionは気持ち悪くないかい?
Private Sub test(r As Range)
とするのが普通だろ?
Functionって戻り値を得るものに限定した方がいいと思うが。
0512デフォルトの名無しさん
2008/01/28(月) 17:52:070513510
2008/01/28(月) 19:47:40すみません、実際は最後はEnd Functionとなってます。
Functionはおかしいんですかねぇ。
それはさておき、実は某所で引数が参照型の場合、ByValが速いとかByRefは気持ち悪いとかいう方がいるんですがどうなんでしょうか?
ご存知でしたらお願いします。
0514デフォルトの名無しさん
2008/01/28(月) 20:22:33byrefだと参照の参照が渡されるから
確かに気持ち悪くて遅いわな。
大差ないけど。
0515デフォルトの名無しさん
2008/01/28(月) 20:32:01値渡し=全引数を別アドレスにコピー ⇒ 少し余分に時間が掛かる と思ってた。
0516デフォルトの名無しさん
2008/01/28(月) 20:40:11それ以外はbyvalでという方針にしておくのが良い。
(自分で定義したサイズが大きな型は別)
0517デフォルトの名無しさん
2008/01/28(月) 20:41:15なんか勘違いしてない?
実際にやってみたらどうよ。
ByValが速いはずねーだろ?
>>510のおかしなコードじゃ分からないだろうが、なんか戻り値のあるFunctionで試したら?
0518デフォルトの名無しさん
2008/01/28(月) 20:42:00やってみりゃわかるけど、byrefの方が速いよ
0519デフォルトの名無しさん
2008/01/28(月) 20:43:16「参照の参照」という表記が、参照がわかってない証拠。
0520デフォルトの名無しさん
2008/01/28(月) 20:51:520521デフォルトの名無しさん
2008/01/28(月) 20:53:430522デフォルトの名無しさん
2008/01/28(月) 21:06:45Range型の引数でByValが速いケースってどういうケースだ?
0523デフォルトの名無しさん
2008/01/28(月) 21:27:270524デフォルトの名無しさん
2008/01/28(月) 21:33:150525デフォルトの名無しさん
2008/01/28(月) 22:28:34もちろん、Byrefの方がかなり速い
0526デフォルトの名無しさん
2008/01/28(月) 22:38:420527デフォルトの名無しさん
2008/01/28(月) 22:41:480528デフォルトの名無しさん
2008/01/28(月) 22:53:34timeGetTimeで計ったが参照私が速かった。
言っとくがtimeGetTimeだって1/1000秒の精度はないからな。
0529デフォルトの名無しさん
2008/01/28(月) 22:56:30ただその分使用時に一段間接参照のコストがかかるだけ。
0530デフォルトの名無しさん
2008/01/28(月) 22:57:510531デフォルトの名無しさん
2008/01/28(月) 23:06:12意味不明なこと言ってたやつが前にいたな。彼は勘違いしてるんだろうね。
0532デフォルトの名無しさん
2008/01/28(月) 23:06:27JAVAと一緒
0533デフォルトの名無しさん
2008/01/28(月) 23:07:390534デフォルトの名無しさん
2008/01/28(月) 23:08:44ちゃんとポイントして指摘しろ
0535デフォルトの名無しさん
2008/01/28(月) 23:10:190536デフォルトの名無しさん
2008/01/28(月) 23:25:400537デフォルトの名無しさん
2008/01/28(月) 23:28:200538デフォルトの名無しさん
2008/01/28(月) 23:32:100539デフォルトの名無しさん
2008/01/28(月) 23:37:01されてるんじゃないの?
だから、使用時に間接参照のコストなんかかからないんじゃ?
0540デフォルトの名無しさん
2008/01/28(月) 23:45:18試せばわかる
0541デフォルトの名無しさん
2008/01/28(月) 23:47:580542デフォルトの名無しさん
2008/01/28(月) 23:54:37俺のは、多少遅くとも516のポリシーが良いという主張。
VB.NETも、デフォルトByValになったことだし。
0543デフォルトの名無しさん
2008/01/28(月) 23:59:10そっか遅いのは認めるわけね。
ByRefが遅いと書いた514はどうだろう?
0544デフォルトの名無しさん
2008/01/29(火) 00:00:11Excelってベンチマークデータの公表禁止だったっけ?
0545デフォルトの名無しさん
2008/01/29(火) 00:05:23別に禁止じゃねーだろ?
ただみんな自分で計測して分かってると思うけどな
計測してないやつが思い込みでおかしなこと言ってるだけ
0546デフォルトの名無しさん
2008/01/29(火) 00:08:170547デフォルトの名無しさん
2008/01/29(火) 00:10:57だよな。それ以前に>>511で終わってるわな
0548デフォルトの名無しさん
2008/01/29(火) 01:56:18オブジェクトをByValで渡すと、539の言う通り。オブジェクトへの参照(ポインタ)が渡される。
ByRefだとオブジェクトの変数への参照(ポインタ)が渡される。
いずれにせよ、渡されるのはポインタ値の4バイトだが、
ByValだと参照カウントの処理が要る分、コストがかかるように見える。
一方、ByRefでは2重に間接参照をしなければならないコストがあるはずなので、
測定条件によってどっちが速いかは変わってくるはず。
0549デフォルトの名無しさん
2008/01/29(火) 02:14:31で、どんな時に変わるのよ? 変わる”かもしれん”から一概には言えないってか?
0550デフォルトの名無しさん
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
0551デフォルトの名無しさん
2008/01/29(火) 08:24:50しかし、ByValの内部コピーはメモリ読み書きがそれぞれサイズ(/4)回余計に掛かることになる。
従って、どちらが早いかは自明。
0552デフォルトの名無しさん
2008/01/29(火) 08:25:03Private 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回なら割合としては上の計測よりもっと差がつく。
0553デフォルトの名無しさん
2008/01/29(火) 08:27:030554デフォルトの名無しさん
2008/01/29(火) 10:10:38勉強になりました。
0555デフォルトの名無しさん
2008/01/29(火) 10:51:23私もここからきますた。
ビヒネスソフト板以外にExcelのスレがあるとは知らんかった。
0556デフォルトの名無しさん
2008/01/29(火) 11:41:14他のオタクの人たちも既にいると見たがどうよ。
0557デフォルトの名無しさん
2008/01/29(火) 12:42:38どうやら思い違いには気がついたらしいからよかったじゃないか
0558デフォルトの名無しさん
2008/01/29(火) 12:58:04*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より)
0559550
2008/01/29(火) 13:07:28だったらすまんね。
0560558
2008/01/29(火) 13:11:53プロパティ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
0561558
2008/01/29(火) 13:15:54ByValをByRefに変えて実行してみる。
[結果]
Initialized
abc
(ここで実行時エラーが発生する)
[考察]
実行時エラーが発生した行は、barから戻ってo.Nameを参照する行。
このことは、bar内でオブジェクトが破棄された、すなわちByRefは参照カウントを増やしていない
ことを意味する。
>>560の結果とあわせると、結論は、
オブジェクトをByRefで渡すと、それ自身が渡され、参照カウントも増えない。
オブジェクトをByValで渡すと、オブジェクトがコピーされるのではなく、参照カウントが増えるだけ。
0562デフォルトの名無しさん
2008/01/29(火) 13:16:06これはみんな常識として知ってるだろうね。
もちろん考察には感謝する。
0563558
2008/01/29(火) 13:19:10Sub bar(ByVal o As Class1)
Debug.Print o.Name
o.Name = "def"
Set o = Nothing
End Sub
0564558
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
[一連の書き込み終了]
0565558
2008/01/29(火) 13:30:33オブジェクトをByValで渡す場合は、前述のようにリファレンスカウントが増えるだけであり、
仮引数のconst性(不変性)を保障するものではまったくない。
その意味で、>>516のポリシーは間違っている。
0566デフォルトの名無しさん
2008/01/29(火) 13:42:59速度の計測なんてすぐできることだろうに。
0567デフォルトの名無しさん
2008/01/29(火) 13:49:29組み込みオブジェクト(というのか?)だと、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は正しい。
あーややこしい。
0568デフォルトの名無しさん
2008/01/29(火) 13:51:25勘違いは誰でもあるし、反省してると思うよ。
0569デフォルトの名無しさん
2008/01/29(火) 13:53:000570デフォルトの名無しさん
2008/01/29(火) 14:00:290571デフォルトの名無しさん
2008/01/29(火) 14:06:080572デフォルトの名無しさん
2008/01/29(火) 14:18:49ただ、byrefの方がbyvalより速いというのが事実だということは確かだよな。
0573デフォルトの名無しさん
2008/01/29(火) 14:23:250574デフォルトの名無しさん
2008/01/29(火) 14:49:38基本はLong型と同じ
byvalでも渡されるのが参照情報だからbyrefみたいに
感じちゃうってこと
0575デフォルトの名無しさん
2008/01/29(火) 15:02:19それbarの中で新しいRangeオブジェクトを作り出してるから、根本的に565が書いたコードと違う
0576デフォルトの名無しさん
2008/01/29(火) 15:07:53反省してるかねぇ。
すっとぼけてるけど、なんとかByValが遅いのは認めたらしい。
ただお行儀がどうのこうのとまだ言ってるよ。
別に参照渡しは行儀悪くねーだろ?
0577デフォルトの名無しさん
2008/01/29(火) 16:25:15そもそも、VBAのデフォルトがbyrefなんだから、神経質ではない普通の人が
function foo(r as range)
と書くと、それはByRefになる。
これがお行儀が悪いということは、
function foo(byval r as range)
と書くのが「お行儀が良い」ということになる。
こんな書き方がデフォルトの奴は診たこと無いぞ。
0578デフォルトの名無しさん
2008/01/29(火) 16:54:080579デフォルトの名無しさん
2008/01/29(火) 17:09:17Typeで定義した型のことなら、それに関しては同意と言おうと思ったら、
そもそもTypeのユーザ定義型は、値渡しできなかった。
0580550
2008/01/29(火) 17:26:39仕事から帰って再度試したら、もっと回しても逆転まはしてなかった。スマン
測定誤差だったみたいだな。
誰かが書いてたと思うが、結局ByValが速くなるケースってなさそうだな。
0581デフォルトの名無しさん
2008/01/29(火) 17:43:20エロイ人教えて
0582デフォルトの名無しさん
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
0583510
2008/01/29(火) 18:00:36どうやら参照渡しで問題ないということがわかり一安心です。
ありがとうございました。
0585デフォルトの名無しさん
2008/01/29(火) 19:40:380586デフォルトの名無しさん
2008/01/29(火) 19:41:250587デフォルトの名無しさん
2008/01/29(火) 19:46:43デフォルトがそうだし、仮に全部ByRef にしたトコで悪影響があるんだろうか?
要するに、関数にオブジェクト変数を渡せば、ByValにしたとこで内容の保護はできんわけだし。
0588デフォルトの名無しさん
2008/01/29(火) 20:56:04それは言えるかも知らんね。ByValが速いケースもあるんだけどな。
オブジェクト型はないかも知らんが、他のケースでは確実にある。
0589デフォルトの名無しさん
2008/01/29(火) 21:32:15だから、そのケースを示せっての。議論のネタにもならんわ。 自分がそう信じたいだけか?
0590デフォルトの名無しさん
2008/01/29(火) 21:37:50おめー死ねよ。
自分で探すことも出来んのか?
0591デフォルトの名無しさん
2008/01/29(火) 21:54:54↑ググってみて一番上ね
0592デフォルト知らず
2008/01/29(火) 21:59:20戻り値を親に返す必要がないから、ByValを当然に使うと考えていた。
戻り値を親に戻す必要があればByRefと、ただ単にプログラムテクニックぐらい。
で、スピードは全く気にしていなかった。
ベンチマークでなく、実用・実践のレベルでのものでも、書き換えた方が早いのだろうか? ex 与件を渡すinteger型変数5つぐらい
0593デフォルトの名無しさん
2008/01/29(火) 22:14:57おれはここで散々>>510のケースはByRefが速いって書いてきたからな。
勘違いするなよ。
0594デフォルトの名無しさん
2008/01/29(火) 23:53:02Cells(hoge, fuga).Value
で値を取り出したときに
元のセルが3だったとすると
値がそのまま3である場合と
3.0になっている場合があるようなんです
常に3であるように取り出すにはどうするのがよいでしょうか?
0595デフォルトの名無しさん
2008/01/30(水) 03:58:58お前が死ね。
二度と来るな。
迷惑だ。
0596デフォルトの名無しさん
2008/01/30(水) 05:05:50モーグは、大村なんとかが嫌いだったので見てなかったんだが、久しぶりに見に行ったら
井川はるきという気持ち悪い奴がのさばってた。
ぐぐったら、こいつ何冊も本出してるな。
掲示板で初心者相手に回答もしてるみたいだし、ほんときもちわりー
0597デフォルトの名無しさん
2008/01/30(水) 07:37:28ByRefとByValの話はもう終わり?
何かあるのかと思ったら、既出ネタの応酬とグダグダの展開に正直がっかりです。
0598デフォルトの名無しさん
2008/01/30(水) 09:35:530599デフォルトの名無しさん
2008/01/30(水) 11:02:26お前よりは役にたってるよ。
今回の引数の渡し方については、嘘をどうどうと書いたので叩かれてもしょうがないけどな。
0600デフォルトの名無しさん
2008/01/30(水) 11:13:050601デフォルトの名無しさん
2008/01/30(水) 11:19:17そんなのありえないだろ?
元のセルが3.0という文字列なら別だが、もともと数値の3なら3だ。
どこかのセルにその値を代入すれば、表示形式によっては3だったり3.0だったりすることはあるがね。
0602デフォルトの名無しさん
2008/01/30(水) 12:31:31役にたってるかなんかどうでもいい。
気持ち悪いかどうかって話だ。
0603デフォルトの名無しさん
2008/01/30(水) 12:49:200604デフォルトの名無しさん
2008/01/30(水) 13:05:20EFCを追放された名無しだろうけど。
0605デフォルトの名無しさん
2008/01/30(水) 13:38:13参照の参照が渡されるから気持ち悪いというのを、もっと説明してください。
0606デフォルトの名無しさん
2008/01/30(水) 14:01:26Mougが下がってるから、あそこで聞けば?
もう>>514はここ見てないかもよ。
0607デフォルトの名無しさん
2008/01/30(水) 14:48:27ここで回答がなければあきらめます。
0608デフォルトの名無しさん
2008/01/30(水) 15:48:05VBはある程度使ってましたが忘れかけ。
質問は
ユーザ定義クラスのインスタンス(の参照?)を渡して関数の先で値を入れてもらいたいのですが、
「型が一致しません」となります。何が原因でしょうか?
【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
よろしくお願いします・・・。
0609608
2008/01/30(水) 15:52:10Call Sheet1.GetData(i, tmpClass) '★ここでエラー発生
0610デフォルトの名無しさん
2008/01/30(水) 16:36:51clsUserAのプロパティでInstancingをPublicNotCreatebleに設定しろ
0611デフォルトの名無しさん
2008/01/30(水) 16:56:42それは違うエラーが出たので昨日の時点で直しました。
クラスをやめて構造体にしてみたら
パブリックオブジェクトモジュールで定義されてないと云々・・・
何この中途半端な言語・・・。
0612デフォルトの名無しさん
2008/01/30(水) 17:35:200613デフォルトの名無しさん
2008/01/30(水) 17:54:48ところで、Sheet1クラスに定義したGetData( ) を
Worksheet型で宣言したオブジェクトから呼ぼうとしてるのだとしたら大笑いなんだが、
そこは大丈夫? (要するに sheetClassList の変数の型が分からないんだが)
0614608
2008/01/30(水) 17:55:22http://up01.ayame.jp/up/download/1201683170/attach/%E5%B7%A5%E7%A8%8B%E8%A1%A8.lzh
PASSは prog
開いたときの真ん前にあるCommand1を押すと問題のポイントでエラーになります。
成功すると正面の表が変化するはず。
0616608
2008/01/30(水) 18:02:44紛らわしくてすみません。
どっちにしても動きは同じですが。
0617デフォルトの名無しさん
2008/01/30(水) 19:12:07再現手順を書け、アホ
とりあえず
Public Sub GetData(idx As Long, item As clsGantClass)
にしたら、コンパイルエラー(呼び出せない)のは無くなった
0618デフォルトの名無しさん
2008/01/30(水) 19:13:35ちょ、お前な。 ステップ実行で確認するくらいしろよ!
自分の意図してる場所のセルのデータが、ちゃんと取れてるかどうかと、
代入しようとしている構造体のメンバの変数型が合ってるかどうか。話はそれからだ。
ソース見る限りでは、Variantじゃなくて、クラスを指定しても動くと思うよ。
⇒ Public Sub GetData(idx As Long, item As clsGantClass)
0619617
2008/01/30(水) 19:15:01ただ、ボタンをクリックしてもエラーは発生しないぞ?
0620デフォルトの名無しさん
2008/01/30(水) 19:16:210621608
2008/01/30(水) 19:35:28sheetClassListはどこか書き換えたんでしょうか?
いまだ動きません。
ほかのマシンで動かしてみようかなぁ
0622デフォルトの名無しさん
2008/01/30(水) 19:42:38以上。
0623618
2008/01/30(水) 19:44:43え? ちょっと待て。何が分からないの? うpしてくれた .xls でいいんだよな?
直さなきゃいけないトコ、普通に分かるだろ。
あと、気になるのは、1度動かすと、sheetClassList.Count の値がぶっ飛ぶ。(ゼロになる)
0624608
2008/01/30(水) 20:04:14CellはRaw:2から読まないとだめでしたね・・・(0+1=1 "id"読んでました)
GetDataの内部の行ではなく、呼び出しの行がエラーになったために、その部分ばかりこだわってました。
ありがとうございました。精進します。
0626デフォルトの名無しさん
2008/01/30(水) 20:21:01流れ変えようと>>514が質問を始めたな。
何が組み込み屋だよwww
0627デフォルトの名無しさん
2008/01/30(水) 20:24:290628デフォルトの名無しさん
2008/01/30(水) 20:37:18流れをぶった切って申し訳ないが無関係なんで・・・。
組み込み屋馬鹿にスンナヽ(`Д´)ノ
0629デフォルトの名無しさん
2008/01/30(水) 21:51:380630デフォルトの名無しさん
2008/01/30(水) 22:44:34配列を一気にboolean型のtrueで初期化する方法はありますか?
Dim hairetu As booleanです
0631デフォルトの名無しさん
2008/01/30(水) 23:06:31エクセルに関しては、授業で習った程度の事しか出来ません。
エクセルのVBAでゲーム作成の課題が出て、マインスイーパを作ってみようと思ったんですが。
全てのボタンをトグルボタンで作ろうとすると、凄く重くなります。
更に一個一個のボタンにコードをいちいち打たなければならないので、
もし出来たとしてもやはり使い物にならなくなると思います。
コードをすっきりさせるやり方で、何か良い方法はありませんか?
お願いします。
0632デフォルトの名無しさん
2008/01/30(水) 23:45:53APIでメモリ操作
>>631
セルをボタンにみたてたら?
0633デフォルトの名無しさん
2008/01/31(木) 00:11:47ネットで調べたのがよくわかりませんでした。
どーいうことなのですか?
0634デフォルトの名無しさん
2008/01/31(木) 09:15:10それも最初考えてみたんですが…。
マインスイーパでいう、ボタンをクリックすると文字が表示されるという動作と、
ボタンに爆弾の印を付けるという動作をさせるやり方が見つからなくて…。
セルの中の値を非表示にして、クリックなどの動作で其れを表示させるというやり方が
可能なのでしょうか?
0635デフォルトの名無しさん
2008/01/31(木) 09:50:20workbookのsheetchangeでいちいち全セルのvalueを見回るようにするとか
どっちにしろ重くなるけど
0636デフォルトの名無しさん
2008/01/31(木) 10:03:14サブクラス化して変数持たせないと呼び出し元識別できないっけ?
0637デフォルトの名無しさん
2008/01/31(木) 14:24:13>>636
コントロール配列が出来るなら…何とか出来るかもしれません。
どちらも自分には難しそうですが、またちょっと調べて作ってきます。
すいません、有難う御座います。
0638デフォルトの名無しさん
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
0639デフォルトの名無しさん
2008/02/01(金) 11:16:45下のサンプルのようなことをやりたいのですが
「オブジェクトはこのメソッドをサポートしてません」と出てしまいしまいます。
(UserForm1は勿論つくってあります)
myForm+ピリオドでShowメソッドが出てこないので、ダメなのは解っているのですが。。
Sub sump()
Dim myForm As UserForm
Set myForm = New UserForm1
myForm.Show
End Sub
0640デフォルトの名無しさん
2008/02/01(金) 11:48:31UserForm と UserForm1 はベツモノのクラスだよ。Control と Textbox みたいな親子関係。
変数の型を UserForm1 にしてやればおk。
0641デフォルトの名無しさん
2008/02/01(金) 12:07:20UserForm1型があるなんて知りませんでした。
親(userform)に子(userform1)を代入、みたいに考えてました・・
ありがとうございます。
0642デフォルトの名無しさん
2008/02/01(金) 12:26:35フォーム型のクラスを継承するイメージかな。
当然、フォームの(オブジェクト名)を変更すると、クラス名(変数型)も変わるよ。
一旦、オブジェクトを作成してから、userform型に userform1を代入するのは間違いじゃない。
userform1、userform2・・・と型が増えたときに、userform に代入すれば、どれでも操作できる。
Control と Textbox、Label、Combobox・・・ の関係と似たようなもんだよね。
0643デフォルトの名無しさん
2008/02/01(金) 12:51:24639=641です
userform1型を使うのはできましたが、これだと
myform変数にuserform2を代入できないことがわかりました。(型が違うため)
このような場合どうしたらよいでしょうか。
>userform1、userform2・・・と型が増えたときに、userform に代入すれば、どれでも操作できる。
このやり方を知りたいのですが。(繰り返しですみません)
0644デフォルトの名無しさん
2008/02/01(金) 13:00:34たびたびすみません、object型を使ったらできました!
これで合ってるでしょうか。
0645デフォルトの名無しさん
2008/02/01(金) 14:25:37↓こういう作りになってれば、少なくともエラーにはならないと思うんだけど・・・?(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型は、なるべく使わないに越した事はないよ。ダメだという意味じゃないけど。
0646デフォルトの名無しさん
2008/02/01(金) 15:32:34やってみましたが、c.Showでエラーになってしまいます。
(メソッドをサポートしません)
0647デフォルトの名無しさん
2008/02/01(金) 16:08:12あー、そういう意味か。
申し訳ない、代入した後は、代入した先の変数型の持ってるメンバしか使えないよ。
Control 型に、ラベルやチェックボックスを入れても.Caption を設定できないのと同じこと。
>myForm+ピリオドでShowメソッドが出てこないので、ダメなのは解っているのですが。。
仰るとおり、Userform 型は、.Show() をサポートしていない。
異なるクラスで、共通のメソッドを呼びたいなら、Objectを使うしかないです。
あるいは、インターフェイス用のクラスを作って Implements する方法があるけど、
フォームに使うのは怖いので、特に事情が無い限りはやめた方がいいと思います。
0648デフォルトの名無しさん
2008/02/01(金) 16:43:27了解です、今回はobjct変数でやることにします。
(やりたいことはメッセージ代わりのフォームを打ち分けたいだけなので)
何度もお手数をとらせ申し訳ありませんでした。
0649デフォルトの名無しさん
2008/02/01(金) 23:54:140650デフォルトの名無しさん
2008/02/03(日) 16:39:17excel: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があった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
長文失礼しました!
0651デフォルトの名無しさん
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
0652デフォルトの名無しさん
2008/02/03(日) 18:35:440653デフォルトの名無しさん
2008/02/03(日) 20:53:17not付けました
実行結果は以下の通りです┐(´ー`)┌
---------------------------
Microsoft Visual Basic
---------------------------
コンパイル エラー:
オブジェクトが必要です。
---------------------------
OK ヘルプ
---------------------------
0654デフォルトの名無しさん
2008/02/04(月) 00:44:54msgbox ("n
nを表示したい場合はmsgbox ("n
このあと何するのか分かる人いたら教えて下さい
0655デフォルトの名無しさん
2008/02/04(月) 00:57:250656デフォルトの名無しさん
2008/02/04(月) 02:52:030657デフォルトの名無しさん
2008/02/04(月) 03:34:180658デフォルトの名無しさん
2008/02/04(月) 13:38:43http://pc11.2ch.net/test/read.cgi/tech/1197881068/276
0659デフォルトの名無しさん
2008/02/05(火) 10:49:33文字を表示させるにはどうすればいいでしょうか
以下では、ダメでした。
Sub test()
If Range("A1").Value = 1 Then TextBox1.Value = "ぼぼぼぼぼぼ"
End Sub
0660デフォルトの名無しさん
2008/02/05(火) 11:22:30つーか、エラーメッセージくらい自力で理解しろよ。
0661659
2008/02/05(火) 11:39:17モジュール間で値渡し?しなければならないというのは
何となく分かるのですが、textbox1の「change」とか「enter」とか
どこに記述すればいいのかも分からず、現在に至っております。
0662デフォルトの名無しさん
2008/02/05(火) 11:49:56エラーメッセージは出ませんでしたか?
恐らく、>653のようなダイアログが出たと思うのですが。
それを見ても何も理解できないようなら人間やめた方が宜しいかと。
0663659
2008/02/05(火) 11:55:57textbox1 の変数が定義されていません と出ますね。
いちおう、フォームでtextbox1は作っているんですよ。
0664デフォルトの名無しさん
2008/02/05(火) 12:41:37標準モジュールに記述してるんだったら、
Range("A1").Value にしろ TextBox1.Value にしろ、未定義扱いになると思うが?
(どこに属するオブジェクトか判断できない。明示的に指定されていない。)
0665デフォルトの名無しさん
2008/02/05(火) 12:48:530667デフォルトの名無しさん
2008/02/05(火) 13:56:32その定義方法がですね、textboxから、プロシージャをcallする場合は
分かるのですが、この逆になると、textboxのchangeなのかenterなのか
keydownなのかどこで定義したらいいのか・・・そもそも不可能なのか・・
0668デフォルトの名無しさん
2008/02/05(火) 14:10:50イベントプロシージャを使うつもりなら、どのイベントで処理するか決めるだけじゃないの?
つか、どういう動きをさせたいの?
0669デフォルトの名無しさん
2008/02/05(火) 14:11:31もしかして、フォームのプロシージャから標準モジュールをサブルーチンとして使いたいのか?
だとしたら、フォーム自身なりテキストボックス自身をそのtest()に渡してやればいい。
やりたいこととやっていることの説明くらいできないようじゃ、先が思いやられるけどね。
0670デフォルトの名無しさん
2008/02/05(火) 15:14:50標準モジュールから、ユーザーフォームのテキストボックスを呼び出して、
なおかつそのテキストボックスに任意の文字列を表示させたいです。
テキストボックスのプロシージャから、標準モジュールを呼び出すのは
何とかできるのですが、逆がどうしても出来ません・・
0671デフォルトの名無しさん
2008/02/05(火) 15:18:49状況説明できない馬鹿にいくら聞いても説明しても無駄だって判ったからさ。
0672デフォルトの名無しさん
2008/02/05(火) 15:21:08いや、だから・・・
何かしらの処理が実現できない、っていう相談じゃなくて、コードの書き方が分からんってこと?
標準モジュールに記述したプロシージャは、どこかから呼ばれるまでは処理が走らない。
その前提の上で、特定のフォームの部品を扱いたいなら、○○(Userform名).Textbox1
例えば、デフォルトのオブジェクト名であれば、Userform1.Textbox1.Value でアクセスできる。
TextBox1.Value だけでは対象が分からんからエラーになる。 単にValue とだけ書くようなもん。
0673デフォルトの名無しさん
2008/02/05(火) 15:24:36Sub foo()
UserForm1.TextBox1.Text = "abc"
UserForm1.Show
End Sub
0674672
2008/02/05(火) 15:29:26あー、ごめん、よく考えたら 672の書き方じゃ絶対に分からんな。
まずはフォームの実体を取得しなきゃならんので、どこかから呼び出されるのを前提で、
”基本的には”標準モジュールのプロシージャに引数として処理対象のオブジェクトを渡すか、
フォームのインスタンスを作るトコから全て標準モジュールの処理で書かないといけない。
0675デフォルトの名無しさん
2008/02/05(火) 15:39:12でけた^^
コードの書き方の問題なのかも分かりませんでした・・orz
ありがとうございました!
0676デフォルトの名無しさん
2008/02/05(火) 15:40:290677672
2008/02/05(火) 15:42:120678デフォルトの名無しさん
2008/02/05(火) 15:44:13なんか勘違いしてない?
インスタンス化はアクセスされると自動的に行われるよ?
0679672
2008/02/05(火) 15:55:59勘違い、つか、VBが特殊な使い方ができるだけで、
インスタンスを作ってから使うのが基本だと俺は思ってるから、自然とそういう書き方になった。
複数のインスタンスが持てないわけでもなし、何故突っ込まれるのかが分からんが。
0681デフォルトの名無しさん
2008/02/05(火) 16:04:15まぁデフォですので・・・。
0682デフォルトの名無しさん
2008/02/05(火) 16:16:38MouseWheel Fixをアドインマネージャに起動時/ロードで設定すると、VBEを開こうとすると
「インストールの準備中」のダイアログが出て先に進みません。
ただ、なぜだかその状態で一度Excelを終了させてすぐに起動すると、そのダイアログが
終了してVBEが立ち上がるようになります。
「起動時/ロード」を設定せずに、Excel起動後にロードしようとしても、やはり最初の一回は
「インストールの準備中」から先に進みません。
何か、解決法はあるでしょうか?
0683デフォルトの名無しさん
2008/02/05(火) 16:40:58強制的にDLLをアンロードするにはどうすればいいですか?
0684デフォルトの名無しさん
2008/02/05(火) 16:57:04日本語訳はヘンテコなんでこっちで。
PRB: Loading and Unloading DLLs in the Design Environment
ttp://support.microsoft.com/?scid=kb%3Ben-us%3B129514&x=14&y=13
0685≠683
2008/02/05(火) 17:17:180686デフォルトの名無しさん
2008/02/05(火) 17:36:25Declareの"r"を削除して行を離れると、強制コンパイルされてDLLがアンロードされるから、
その行に戻って"r"をタイプして元通りにしろってことね。
0687デフォルトの名無しさん
2008/02/05(火) 23:14:50Do 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が無いとのエラーになってしまいます。
おばかな質問で恐縮ですが、よろしくお願いします。
0688デフォルトの名無しさん
2008/02/05(火) 23:33:090689デフォルトの名無しさん
2008/02/06(水) 06:52:49そんな現象なったことないが、原因分かんないならVectorとかで同種のソフト拾ってきて使えば?
もしくはExcelを再インストールして様子見るとか
0690デフォルトの名無しさん
2008/02/06(水) 09:48:27他のアドイン機能はちゃんと動作するのか確認して、異常がないようなら
MouseWheel Fix を一旦登録解除(クラスライブラリ)してから、再登録してみたら?
0691682
2008/02/06(水) 10:50:25コメントありがとうございます。
他のアドインは正しく動きました。また、MouseWheel Fixをregsvr32 /uして再登録してみたんですが
状況が改善しませんでした。
いろいろと検索していると、同種のアドインが見つかりましたので、それを試してみたらうまく
動作しているようなので、とりあえずはこちらを使うことにします。
AddAutoScroll for VB6/VBE6
ttp://homepage1.nifty.com/mtj-k/software/addautoscroll_vb6.html
0692デフォルトの名無しさん
2008/02/06(水) 11:30:49excel 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プロパティが取得できません」とエラーがでます
基礎的な間違いをしてる気がするのですが、どうかアドバイスをお願いします
0693デフォルトの名無しさん
2008/02/06(水) 11:53:18Workbooks.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です。
原因と対策がよくわからなくて困っております。
何かご存知でしたら教えていただければ、と思います。
よろしく頼みます。
0694デフォルトの名無しさん
2008/02/06(水) 12:28:21xの配列を渡さずに ~.LinEst(y) と書いたら動くから、パラメータの与え方が違うのかな?
スマンが使った事が無いので、識者を待つか、ヘルプを見れ。
ttp://office.microsoft.com/ja-jp/excel/HP100698381041.aspx?pid=CH100645381041
0695692
2008/02/07(木) 07:29:16ただの宣言ミスでした。
Dim x(10) as single, y(10) As Single
としたら動きました。
>>694
どうもありがとうございます。
聞く時はもっと気を付けてからにしようと思います。
0696デフォルトの名無しさん
2008/02/07(木) 12:10:10激しくスレ違いかもしれませんが、質問です。
PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。
現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。
で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。
この違いはいったいなんなのでしょうか?
0697デフォルトの名無しさん
2008/02/07(木) 13:28:40どちらにしても激しくスレ違いだから帰れ。
0698デフォルトの名無しさん
2008/02/07(木) 13:43:460699デフォルトの名無しさん
2008/02/08(金) 10:06:370700デフォルトの名無しさん
2008/02/08(金) 22:02:520701デフォルトの名無しさん
2008/02/09(土) 15:17:19CDO.Messageを使ってQuotedPrintableでの送信はできています
0702デフォルトの名無しさん
2008/02/09(土) 15:29:150703デフォルトの名無しさん
2008/02/09(土) 15:36:00ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。
皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。
0705デフォルトの名無しさん
2008/02/09(土) 16:32:41ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。
皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。
0706デフォルトの名無しさん
2008/02/09(土) 16:34:13最近のメーラは添付ファイルがアイコンなんかで表示されたりして隠蔽されて
いるけど,昔は送りたいバイナリをテキストにエンコードして文字通りメール
本文の下に貼り付けてましたよ。
↓こんなイメージ
-------ここから------------------------
encoded by なんちゃらかんちゃら
risdgfniefngoenogfaenogengopenoanongoneogneoagnoengea
fbwhibfiwbfiwbfiwbfiwbfibwibfiwbfiwbfiwbifbiwfbiwbfiw
0707デフォルトの名無しさん
2008/02/10(日) 03:48:29A1には半角英数字のみが入ってるとします。
このファイルには複数シートがあり、全シートにA1には違う文字列があります。
各A1の文字や文字数はシート毎にバラバラですが、半角英数字は変わりません。
質問としては、各シートのA1内に入っている半角大文字のみ
それぞれのシートB2に出力するのは可能?可能ならばヒントをお願いしたい
です。
0708デフォルトの名無しさん
2008/02/10(日) 08:19:57・セルA1内の文字列を取得する
・大文字があるか検索する
・文字列を組み立てる
・セルB2に設定する
・それらを全てのシートについて行なう
0709デフォルトの名無しさん
2008/02/10(日) 15:33:57どう書けば良いのでしょうか?
0710デフォルトの名無しさん
2008/02/10(日) 15:50:510711デフォルトの名無しさん
2008/02/10(日) 16:07:26A1から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
というのをやりたいのですが、、初心者で分かりません。
特にセルのところをどうすればいいのか分かりません。教えてください。
どなたかお願いします。
0712デフォルトの名無しさん
2008/02/10(日) 16:11:500713デフォルトの名無しさん
2008/02/10(日) 16:23:57補聴器買ったほうがいいと思うよw
0714デフォルトの名無しさん
2008/02/10(日) 16:36:380715デフォルトの名無しさん
2008/02/10(日) 16:38:40>>704 には幻聴が聴こえるようだから精神科を薦めた方が良いのでは?
0716デフォルトの名無しさん
2008/02/10(日) 16:56:470717デフォルトの名無しさん
2008/02/10(日) 17:02:23へたっぴな運転を見てからかってる。
0718デフォルトの名無しさん
2008/02/10(日) 18:29:04ウェ〜
0719デフォルトの名無しさん
2008/02/10(日) 18:47:180720>711
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
0721デフォルトの名無しさん
2008/02/10(日) 21:12:35例えば、Aの列にはデータを10〜20個入れたとして、
B1にデータ一個を入れます。
このとき、Cの列にはC1=A1-B1、C2=A2-B1・・・というように、
AのデータとB1の差を代入したいと思うのですが、簡単なやり方がわかりません。
確かコピペですいすいいけたと思うのですが・・・
ご教授お願いします。
使ってるのはXPsp1のexcel2002です。
0722デフォルトの名無しさん
2008/02/10(日) 21:28:24減算で。
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
0723デフォルトの名無しさん
2008/02/10(日) 21:29:34Cells(i,3).Value=Cells(i,1).Value-Cells(1,2).Value
Next
つかVBAの質問なの???
0724デフォルトの名無しさん
2008/02/10(日) 21:34:29C1に=A1-$B$1
C1の右下つかんで下方向にびろ〜んとする
0725デフォルトの名無しさん
2008/02/10(日) 21:54:21すいません、理解できませんwww
>>724
ありがとうございます〜
0726デフォルトの名無しさん
2008/02/10(日) 22:09:59ありがとうございます。。
というか自分、何やってんだorz
0727デフォルトの名無しさん
2008/02/11(月) 20:33:25(質問内容)
フォルダ内で「読取パスワードが設定されいてるEXCELファイルを検索する」
どなかた該当の命令文をおしえていただけないでしょうか。
0728デフォルトの名無しさん
2008/02/12(火) 03:00:10Execだとウィンドウ非表示にできないし、Runだと標準出力につなげないんですが
0729デフォルトの名無しさん
2008/02/12(火) 03:19:36FAQ
0730デフォルトの名無しさん
2008/02/12(火) 03:55:12コンソール プロセスを生成して標準ハンドルをリダイレクトする方法
0731デフォルトの名無しさん
2008/02/12(火) 04:04:030732デフォルトの名無しさん
2008/02/12(火) 07:47:070733デフォルトの名無しさん
2008/02/12(火) 09:13:59GUIがないソフトがあるんで使ってる。
0734デフォルトの名無しさん
2008/02/12(火) 12:20:000735デフォルトの名無しさん
2008/02/12(火) 12:20:530736デフォルトの名無しさん
2008/02/12(火) 12:53:06アレを、ほとんどの人はDOS窓と呼ぶのだ。
0737デフォルトの名無しさん
2008/02/12(火) 13:12:58Aに行が挿入されてBになっている場合、Aにも挿入した分だけ空白行を入れて表示したいが、いい例はないものか。
0738デフォルトの名無しさん
2008/02/12(火) 13:21:080739デフォルトの名無しさん
2008/02/12(火) 13:25:560740デフォルトの名無しさん
2008/02/12(火) 13:33:000741デフォルトの名無しさん
2008/02/12(火) 14:05:52コマンドプロンプトは DOS とは互換性がないからなぁ
0742デフォルトの名無しさん
2008/02/12(火) 14:08:38DOSプログラムは、コマンドプロンプトでは動かないの?
0743デフォルトの名無しさん
2008/02/12(火) 14:12:130744デフォルトの名無しさん
2008/02/12(火) 14:12:41本尊乙
0745デフォルトの名無しさん
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
0746デフォルトの名無しさん
2008/02/12(火) 18:50:08Application.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
0747デフォルトの名無しさん
2008/02/12(火) 19:01:08ありがとうございますm(_ _)m
おかげさまで解決しました
0748デフォルトの名無しさん
2008/02/12(火) 19:04:58コマンドプロンプトは純粋なWin32プログラム。
仕様面でDOSの流れを大きく受け継いでいるけど。
コマンドプロンプトの中でDOSプログラムを動かすときには、
NTVDM (NT仮想DOSマシン)でDOS環境をこさえて、
その中でcommand.comを起動し、それから目的のプログラムを実行する。
それ以外だと直接NTVDMから始まるが後は同じ。
0749デフォルトの名無しさん
2008/02/12(火) 22:45:34間違いない
0750デフォルトの名無しさん
2008/02/12(火) 23:45:26無理せずテンポラリファイルにリダイレクトして読め
0751デフォルトの名無しさん
2008/02/12(火) 23:45:310752デフォルトの名無しさん
2008/02/13(水) 10:24:27それをEXCEL VBAでやりたい。
(UNIXでやれよ、というのは不可)
0753デフォルトの名無しさん
2008/02/13(水) 10:43:48行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?
判別の難しさと、それに伴う処理速度考えたら現実的じゃないと思うが。
前後データまで絡める判別はVBでは実用的じゃないし、ロジックの問題なら他スレ行け。
0754デフォルトの名無しさん
2008/02/13(水) 11:22:17私だったらピボットテーブル使う。
それぞれのテキストをA列に、B列にはどっちのテキストなのかわかる記号を入力しとく。後はわかるでしょ。
0755デフォルトの名無しさん
2008/02/13(水) 11:34:020756デフォルトの名無しさん
2008/02/13(水) 12:21:30>>753
>行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?
一部改変については、次の行を比較して、一致なら改変、そうじゃなければ挿入と考えるつもり。
(二行改変は考慮しない)
問題は、挿入か削除か。
そのセルを上方検索し、見つかれば削除、でなければ挿入って判断かな。
ロジックってこの板?
0757デフォルトの名無しさん
2008/02/13(水) 12:47:070758デフォルトの名無しさん
2008/02/13(水) 13:14:210759デフォルトの名無しさん
2008/02/13(水) 16:50:590760デフォルトの名無しさん
2008/02/13(水) 16:52:350761デフォルトの名無しさん
2008/02/13(水) 23:07:24だがスレ違い
0762デフォルトの名無しさん
2008/02/14(木) 09:57:51神認定
と思って報告したら、
「入ってるPCと入ってないPCがある」と言われたorz
0763デフォルトの名無しさん
2008/02/14(木) 23:26:240764デフォルトの名無しさん
2008/02/15(金) 23:36:290765デフォルトの名無しさん
2008/02/16(土) 12:41:390766デフォルトの名無しさん
2008/02/16(土) 12:47:320767デフォルトの名無しさん
2008/02/16(土) 13:34:310768デフォルトの名無しさん
2008/02/16(土) 17:25:090769デフォルトの名無しさん
2008/02/16(土) 18:52:161.htmlを記述してあるシートをコピー
2.メモ帳に貼り付け、test.txtとして保存。
3.2のtest.txtをtext.htmlに名前を変更。
というような動作をVBAで自動化できるでしょうか。
もし、似たようなことが可能であれば教えてください。
0770デフォルトの名無しさん
2008/02/16(土) 18:58:330771デフォルトの名無しさん
2008/02/16(土) 19:05:580772デフォルトの名無しさん
2008/02/16(土) 19:12:240773デフォルトの名無しさん
2008/02/16(土) 19:16:09シートの内容をプレーンテキストに出力して拡張子を.htmlにしたいなら
メモ帳なんて使うまでもないが、770も言ってるとおりExcelの仕事じゃない
>>2★3,4
>>771
vbsとかで自動化するのは難しいけど
VBAというかVB言語ではSendMessage使えるから簡単だよ
0774769
2008/02/16(土) 19:51:14具体的な目的を言うと、複数の条件でhtml記述を変化させている
シートがありまして、そのhtmlをブラウザでプレビューするのを
先ほどの手順でやっていたのですが、それを簡素ができないものか
と思っていたのです。
もう少し考えて見ます。
0775デフォルトの名無しさん
2008/02/16(土) 23:19:250776デフォルトの名無しさん
2008/02/17(日) 00:02:380777デフォルトの名無しさん
2008/02/17(日) 13:24:27Excel2007のOfficeボタンを非表示にする方法ってあるのでしょうか?
マイクロソフトのライブラリを見てもまだ情報がなくて……。どなたかご存知の方ご教授いただけませんでしょうか。
0778デフォルトの名無しさん
2008/02/17(日) 15:37:440779デフォルトの名無しさん
2008/02/17(日) 15:39:09引数にシート範囲ではなくVBAの配列を指定したいのですが
そのままでは出来ません。
引数に配列を指定する方法があれば、ご教授願います。
dim a(10) as long
dim b as long
b = WorksheetFunction.Max(a)
0780デフォルトの名無しさん
2008/02/17(日) 16:09:12「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
0781デフォルトの名無しさん
2008/02/17(日) 19:13:16ご回答ありがとう御座います。
ただ、そのコードだとa(10)の値がbに入るだけではないでしょうか?
0782デフォルトの名無しさん
2008/02/17(日) 20:41:33なるほど
あいにく2003なので力にはなれません
でもApplicationクラスのどっかにCommandBarsみたいにあると思うから、
地道に探してみるしかないんじゃ
0783デフォルトの名無しさん
2008/02/18(月) 14:43:42ヴァッカじゃねーのwww
氏ねよwww
チラシの裏でスマソ
0784デフォルトの名無しさん
2008/02/18(月) 15:39:11たまたま>780がmax()の仕様を知らなかっただけだろ。
どうしてもワークシート関数を使いたいなら配列を1要素ずつ処理すればいいと言う点では同意。
max()の場合なら、b = worksheetFunction.max(a(inCnt), b)とでもすれば使える。
# average()なんかはそうはいかないけど。
0785デフォルトの名無しさん
2008/02/20(水) 07:04:05行を変数にはできないんでしょうか?
たとえば変数xをSUM関数につかう場合、=SUM(A1:Ax)としてもエラーになりますよね・・
0786デフォルトの名無しさん
2008/02/20(水) 08:08:490787デフォルトの名無しさん
2008/02/20(水) 11:53:43HYPERLINK関数では、特定の文字を含むリンクは張れないのでしょうか?
現在、HYPERLINK関数を用いたシートの目次を、
マクロで作成しております。
ですが、シート名に記号を含むと参照できないようです。
(@や#などほとんどの記号は駄目ですが、
アンダーバーだけは大丈夫なようです・・・。)
しかし、マクロではなく、編集メニューの
[挿入]→[ハイパーリンク]から同じシートを指定した場合は、
参照できるようですorz
これら2つの操作は全く別物なのかもしれませんが・・・orz
---------------------------------------------
<参照できる例>
=HYPERLINK("#シート名!A1", "シート名")
<参照できない例>
=HYPERLINK("#@シート名!A1", "@シート名")
Excelのバージョン:2002(10.2614.3311)
---------------------------------------------
参照できない例のようなシート名で、
HYPERLINK関数で参照する方法はありますでしょうか?
何かわかる方がおられましたら、ご助言ください。
よろしくお願いします。
0788デフォルトの名無しさん
2008/02/21(木) 12:29:390789デフォルトの名無しさん
2008/02/21(木) 13:27:230790デフォルトの名無しさん
2008/02/21(木) 19:44:500791デフォルトの名無しさん
2008/02/21(木) 19:59:120792デフォルトの名無しさん
2008/02/21(木) 20:11:40IEEE 754倍精度はある。
0793デフォルトの名無しさん
2008/02/21(木) 23:07:20Excel VBAからDOSコマンドを実行することはできますか?
具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
表示するまでを1クリックで行いたいと思っています。
環境はWindowsXP Home Edition、Excel 2003 です。
よろしくお願いします。
0794デフォルトの名無しさん
2008/02/21(木) 23:51:57>Excel VBAからDOSコマンドを実行することはできますか?
ちょいと命令忘れたができる。
VBAからPing送ったりbatを呼び出したりしたりもできるから間違いない。
>具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
>表示するまでを1クリックで行いたいと思っています。
上の内容を具体的にしたつもりだろうが、上ができたとしてもこちらは関係ないだろ?
PerlからExcelにイベントでも起こさせられれば可能。
0795デフォルトの名無しさん
2008/02/22(金) 00:06:300796793
2008/02/22(金) 01:09:30ありがとうございます。では情報があることを信じて
再びgoogleの海へと漕ぎ出すことにします。
>上ができたとしてもこちらは関係ない
言われてみたらその通りでした。
いつPerlの処理が終わったかExcel側で知る必要がありますもんね。
>>795
すみません、XPではコマンドプロンプトでしたか。
0797デフォルトの名無しさん
2008/02/22(金) 01:46:04>>728-731
0798デフォルトの名無しさん
2008/02/22(金) 02:00:350799デフォルトの名無しさん
2008/02/22(金) 12:22:22つまり何桁ですか?
0800デフォルトの名無しさん
2008/02/22(金) 20:07:05倍精度の前のIEEE 754って、何を規定した規格の番号ですか?
0801デフォルトの名無しさん
2008/02/22(金) 21:39:25ググれ
浮動小数点数の規格だ
0802デフォルトの名無しさん
2008/02/22(金) 23:55:17Excel2000辺りは倍精度だけど、2003辺りからは拡張倍精度になっているから要注意。
前者は10進数で概ね15桁、後者は10進数で概ね19桁の精度があることになる。
0803693
2008/02/23(土) 16:40:39Origin句を定数xlWindowsから、
Shift-Jisのコードページである"932"へ変更してみたところ
文字化けなく開くことができたのでご報告。
その辺の細かな挙動の違いにだいぶ時間使いました・・・。
今後の何かの参考になれば、ということで、ひとつ。
0804デフォルトの名無しさん
2008/02/23(土) 16:45:14精度をあげる方法がありましたら教えてください。
0805デフォルトの名無しさん
2008/02/23(土) 18:30:23ソースをご提示願えませんでしょうか。
0806デフォルトの名無しさん
2008/02/23(土) 18:44:190807デフォルトの名無しさん
2008/02/23(土) 20:11:53ワークシート上部のいくつかのセルに任意の数値を入力するとそれに基づいて全体が計算されるシートを作りました。
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が続いてしまうんでしょうか。。?
お知恵をお貸しください
0808デフォルトの名無しさん
2008/02/23(土) 20:23:28整数って意味を知ってるか?
0809デフォルトの名無しさん
2008/02/23(土) 20:28:32こっちに書くとき間違えた\(^o^)/
0810デフォルトの名無しさん
2008/02/23(土) 20:33:09自分でマクロ書かなくても、それはExcelのゴールシークを使えばいいのではないかと思う。
0811デフォルトの名無しさん
2008/02/23(土) 20:36:45うは・・・全然知りませんでした('A`)
お手数おかけしました。ありがとうございます
0812デフォルトの名無しさん
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)) & ..といった式ではうまくいきません。
アドバイス頂けないでしょうか
以上長文失礼しました。
0813812
2008/02/24(日) 11:03:550814デフォルトの名無しさん
2008/02/24(日) 11:37:490815デフォルトの名無しさん
2008/02/24(日) 12:12:23> VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。
log関数は数値が小さいと精度は悪くなる。
少し値が変わると急激に値がかわるからな。
自分で精度のよい関数を作るのがよい。
級数展開とかやれば作れる。
>>805-806
おまえら厨房だな。
0816デフォルトの名無しさん
2008/02/24(日) 13:44:03ボタンを設置します。設置したラベルやボタンが常にフォーム幅の真ん中に設置
させる方法はありますでしょうか?フォームの大きさを後で変更しても真中に自動で
なるようにしたいです。
0817812
2008/02/24(日) 15:25:46それだとコンマをくっつけることができませんでした。
しかし、結局、こんな感じで解決しました
if(C2<>"",concatenate(D1,",",text(C2,"#")),D1)
0818デフォルトの名無しさん
2008/02/24(日) 21:05:38算数レベルで処理
0819800
2008/02/24(日) 22:00:00Thanks。概ねという留保付けは、このせいですか?
Excel で浮動小数点演算の結果が正しくない場合がある 2007年3月19日
http://support.microsoft.com/kb/78113/ja
0820デフォルトの名無しさん
2008/02/24(日) 22:38:320821802
2008/02/24(日) 22:49:22つまり、log2(2^53)≒15.95=15~16桁。
0822デフォルトの名無しさん
2008/02/25(月) 10:04:55ある場合のみ(B列やC列ではプログラム自体が稼動しなくしたいのですが)
FANCTIONを実行したいのですが、うまくいきません。
どうしたらうまくうごくのでしょか?
0823デフォルトの名無しさん
2008/02/25(月) 11:18:34もうちょっと分かるように説明しる。あと、どんなFUNCTIONよ?
ボタン押したときに、カーソルが特定の列にある場合にのみ処理を有効にしたいってことか?
0824デフォルトの名無しさん
2008/02/25(月) 11:38:48>カーソルが特定の列にある場合にのみ処理
まさにこの事です。エクセルの行列のデーター
を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)
を変数にしたものです。
0825デフォルトの名無しさん
2008/02/25(月) 11:42:10ActiveCell.Offset(0, x+2)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+1)
を変数にしたものです。
です。
0826デフォルトの名無しさん
2008/02/25(月) 12:17:05単にFANCTIONとやらの先頭で、ActiveCellがA列じゃなければ終わればいいだけじゃね?
0827825
2008/02/25(月) 12:58:53書けないのです・・・
0828デフォルトの名無しさん
2008/02/25(月) 13:12:22offsetプロパティに辿り着けるくらいならcolumnプロパティくらい見つけられるだろ。
試しにmsgbox activecell.columnして味噌。
0829825
2008/02/25(月) 14:11:10828さん ありがとうございます。
感謝 感謝!
0830デフォルトの名無しさん
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)
は、構文エラーになります。なんで?
わざわざ変数に格納しないと、機能しないのはなぜなのでしょうか?
詳しい人おられましたらご教授いただけないでしょうか?
0831デフォルトの名無しさん
2008/02/25(月) 16:00:260832デフォルトの名無しさん
2008/02/25(月) 17:16:37Rng1 AS Range
Rng2 AS Range
Rng=Range("A1:G10")
このRngから一番右の範囲をRng1に入れたい。
またRngから一番右の列を除いた範囲をRng2に入れたい。
どのようにすればよいでしょうか?
0833デフォルトの名無しさん
2008/02/25(月) 18:32:270834デフォルトの名無しさん
2008/02/25(月) 18:45:36Callステートメント
0835デフォルトの名無しさん
2008/02/25(月) 18:49:27Rng1=Rng.Resize(Rng.Row.Count-1,Rng.Columns.Count).offset(1,0)
Rng2=Rng.Resize(1,Rng.Columns.Count).offset(1,0)
0836デフォルトの名無しさん
2008/02/25(月) 22:51:26Worksheets("sheet1").ChartObjects.Add 50, 40, 200, 100
0837デフォルトの名無しさん
2008/02/25(月) 23:07:06今度VBAをメンテすることになって読みにくいなあと思ってるんだが・・・。
0838デフォルトの名無しさん
2008/02/25(月) 23:21:310839デフォルトの名無しさん
2008/02/25(月) 23:40:24はぁ?
>>832
Set Rng1 = Rng.Columns(Rng.Columns.Count)
Set Rng2 = Rng.Resize(, Rng.Columns.Count - 1)
0840デフォルトの名無しさん
2008/02/25(月) 23:55:210841デフォルトの名無しさん
2008/02/26(火) 00:00:18どうやってもできません・・・
ファイルの読み込みってどうやればいいのでしょうか?
0842デフォルトの名無しさん
2008/02/26(火) 00:17:49ブックを開いておいて、シートを移動すれば医院で内科医。
0843デフォルトの名無しさん
2008/02/26(火) 00:27:13擬似的なタイマを作成するときに、何か注意点とか欠点教えてください
0844デフォルトの名無しさん
2008/02/26(火) 00:28:180845デフォルトの名無しさん
2008/02/26(火) 00:30:47VBAでボタンでファイルを選択って出したいのです!
でも参照とか選択ってBOXの出し方すら分かりません・・・
0846デフォルトの名無しさん
2008/02/26(火) 00:56:58ファイルを開くダイアログ
ttp://www.serpress.co.jp/excel/vba030.html
0847デフォルトの名無しさん
2008/02/26(火) 01:14:150848デフォルトの名無しさん
2008/02/26(火) 01:15:58おお、これでBOX造れるんですね!どうも!
またちょっと頑張ってみます
0849デフォルトの名無しさん
2008/02/26(火) 07:10:38こういう事?
Private Sub UserForm_Initialize()
Application.Visible = False
UserForm1.Show
End Sub
0850デフォルトの名無しさん
2008/02/26(火) 08:29:10a = Count("a1:a4")
For i = 1 To a
Beep
Next i
シートのデーター数だけ繰り返し処理したいのですが
a = Count("a1:a4")ここんとこがエラーになってしまいます。
どう処理したらいいのでしょう?
0851デフォルトの名無しさん
2008/02/26(火) 12:43:24でどう?
試してないけど。
0852デフォルトの名無しさん
2008/02/26(火) 16:50:490853デフォルトの名無しさん
2008/02/26(火) 19:00:35RefEdit1.Valueを『セル範囲』かどうか調べる方法はありますでしょうか?
よろしくお願いします。
0854デフォルトの名無しさん
2008/02/26(火) 20:10:29プログラムを走らせ、フォームがでますが、
何も入力せずに放置するとFrame内だけが白くなります。
改善する方法はありますでしょうか?
0855デフォルトの名無しさん
2008/02/26(火) 21:57:03>>834 さん
なるほど!。値を渡す構文になってしまっていたのですね!
>>836 さん
本当だ!動きました。ありがとうございました。
834さん。836さん。お陰様で疑問が解決しました。感謝!感謝!
0856デフォルトの名無しさん
2008/02/26(火) 22:29:04気にすると体に毒だぞ
0857デフォルトの名無しさん
2008/02/27(水) 09:51:07つまり対策はないと?
0858デフォルトの名無しさん
2008/02/27(水) 09:52:180859デフォルトの名無しさん
2008/02/27(水) 18:33:00俺ら低レベルではわからないんだよ。
0860デフォルトの名無しさん
2008/02/27(水) 21:33:21再現する最低限の構成で、ブックもしくはユーザーフォームモジュールをうp
情報全く無しじゃ、さすがに改善法どころか改善可能か否かすらもわからんわな
0861デフォルトの名無しさん
2008/02/27(水) 23:22:060862デフォルトの名無しさん
2008/02/28(木) 00:26:290863デフォルトの名無しさん
2008/02/28(木) 05:23:210864デフォルトの名無しさん
2008/03/01(土) 04:27:200865デフォルトの名無しさん
2008/03/01(土) 04:55:31VBAの範囲だけじゃ無理だけど実現可能
0866入院中の側近 ◆0351148456
2008/03/01(土) 08:15:23(っ´▽`)っ
暇なので作ってみたよ☆
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
(次レスに続く)
0867入院中の側近 ◆0351148456
2008/03/01(土) 08:16:12Public 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
0868入院中の側近 ◆0351148456
2008/03/01(土) 08:36:24>>866-867はPrintScreenするマクロだよ。
あとは任せた☆(っ´▽`)ノシ
0869デフォルトの名無しさん
2008/03/01(土) 08:41:50考えているんですが、VBIOSCMみたいなDLLってVista対応版は
ありますか?
その他でパラレル制御の方法はありますか?
是非ご教授願います。
0870デフォルトの名無しさん
2008/03/01(土) 10:07:39エクセルシートに書き出したい。
DIR関数でやってみたけど、
フォルダを見つけたら階層を掘って、掘り尽くしたら戻って…
て処理が上手く行かない。
ご協力頼んます
0871デフォルトの名無しさん
2008/03/01(土) 10:10:050872入院中の側近 ◆0351148456
2008/03/01(土) 10:21:41(っ´▽`)っ
ヒント:再帰
0873入院中の側近 ◆0351148456
2008/03/01(土) 10:28:33(っ´▽`)っ
こういう関数を作る。
引数:フォルダ
処理
・引数のフォルダの情報をワークシートに書き出す。
・フォルダ内の全てのファイルの情報をワークシートに書き出す。
・フォルダ内の全てのサブフォルダに対し、それを引数として当関数を呼び出す。
(っ´▽`)っ
ちなみにエラーをキャッチしておかないと、
参照不可のフォルダ、ファイルのところで処理が止まるよ。
ファイル、フォルダに関してはScripting.FileSystemObjectを使うといい。
0874870
2008/03/01(土) 11:16:18ありがとう。やってみます。
0875デフォルトの名無しさん
2008/03/01(土) 13:25:08単にファイル名を書き出したいだけなんだな。
0876デフォルトの名無しさん
2008/03/01(土) 21:36:050877デフォルトの名無しさん
2008/03/01(土) 23:32:26ttp://www.atmarkit.co.jp/fwin2k/win2ktips/310filelist/filelist.html
0878デフォルトの名無しさん
2008/03/02(日) 23:54:52WScript.sleep (250)
と記述していますが、エラー424 オブジェクトが必要です というエラーが出るのです。
何か参照設定が足りないんでしょうか。。
0879デフォルトの名無しさん
2008/03/02(日) 23:56:420880デフォルトの名無しさん
2008/03/03(月) 00:01:10WScript.exeを参照設定しろー
0881デフォルトの名無しさん
2008/03/03(月) 00:45:53ありがとうございます。
WScript.exeを参照し、Windows Script Host(Ver5.6)を参照設定に加えたのですが
やはり同じエラー出ました。
参照の問題では無さそうなので、設定も含めた他の部分をもう一度見直して見ます。
>>879
当然質問前に検索したのですが、WScriptの参照設定について記述されたページが見つからなかったもので・・・。
すみませんでした。
0882デフォルトの名無しさん
2008/03/03(月) 01:15:500883デフォルトの名無しさん
2008/03/03(月) 01:22:50それって、Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)じゃいけないの?
0884デフォルトの名無しさん
2008/03/03(月) 10:54:00Excelファイルが散在してるし、開いてからAlt+F11を押す手間とか効率悪いです。
GoogleDesktopSearch用Excel VBAプラグインってないもんですかね?
0885デフォルトの名無しさん
2008/03/03(月) 11:52:08まぁ、そういうものがあるかどうかって話になるけど。
0886デフォルトの名無しさん
2008/03/03(月) 11:59:12VBAのコードは、マクロでファイルにexportできるから、作ろうと思えば比較的簡単に作れる。
ただし、そのexportしたものがGDSでIndexingされるかどうかは、別の話。
0887デフォルトの名無しさん
2008/03/03(月) 13:43:25保存するとき拡張子に.txtを追加してあげればいいよね。
とりあえず何とかなりそうな気がする。どもども。
0888できたよん
2008/03/03(月) 18:53:27準備
・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
0889デフォルトの名無しさん
2008/03/04(火) 12:34:14たとえば、BOOK1のファイルごと、削除したいのですが
どうゆうコードで書いたらいいのですか?
0890デフォルトの名無しさん
2008/03/04(火) 12:41:430891デフォルトの名無しさん
2008/03/04(火) 13:15:200892デフォルトの名無しさん
2008/03/04(火) 16:57:420893デフォルトの名無しさん
2008/03/05(水) 11:30:59.value = "hogeの値は" + hoge + "です"
の表記をしたいのですが、""テキストと、変数を並べて表記する方法が分かりません。
+で結合ではありませんでした。
VBAでのテキストと変数の表記方法を教えてくださいませ。
0894デフォルトの名無しさん
2008/03/05(水) 12:00:21VBの文字列結合は &
0895デフォルトの名無しさん
2008/03/05(水) 12:44:58Kill "BOOK1.*"
End Sub
book1のファイルのコマンドボタンでこれを実行すると、ファイルが
みつからないとエラーだでてしまうのですが・・・
ファイルをかっこよく消したいです。
0896デフォルトの名無しさん
2008/03/05(水) 13:14:45かっこわりw
もしかして、ワイルドカードが使えないんじゃないの?
0897デフォルトの名無しさん
2008/03/05(水) 13:17:44でも使えないの・・・
0898デフォルトの名無しさん
2008/03/05(水) 14:18:020899デフォルトの名無しさん
2008/03/05(水) 14:42:210900デフォルトの名無しさん
2008/03/05(水) 15:30:35一気に範囲データを読み込むことは出来ないのでしょうか?
0901デフォルトの名無しさん
2008/03/05(水) 17:00:06rng=Range("A1:C3")
このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?
0902デフォルトの名無しさん
2008/03/05(水) 17:06:38If ActiveCell.Column <> 1 Then
Exit Function
End If
じゃだめなの?
0903デフォルトの名無しさん
2008/03/05(水) 17:29:47訂正します。
Dim d(100,100)AS Double
Dim rng AS Range
rng=Range("A1:C3")
d=(double)Transport(rng)
↑
このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?
0904デフォルトの名無しさん
2008/03/05(水) 20:34:08おれも尻鯛
0905デフォルトの名無しさん
2008/03/05(水) 21:17:08まずはどうしてもループが使えない事情があるなら説明してみろ
単に使いたくないとか時間が掛かるとかなら帰れ
0907900
2008/03/05(水) 21:38:46お前らマジ役立たず
0908900
2008/03/05(水) 21:39:40>>905
ループで一度データをコピーするプログラムを作成したのですが、
開始から終了までかなり時間がかかってしまうことが分かりました。
処理時間を軽減できないかと考えて、範囲ごとコピーできないかと考えた
のが理由です。
0909デフォルトの名無しさん
2008/03/05(水) 21:43:040910デフォルトの名無しさん
2008/03/06(木) 02:28:41速度向上のためにはSelectするな!withを使え!
Rangeで取り込んで配列に一括取り込み。
0911デフォルトの名無しさん
2008/03/06(木) 02:32:43まず型変換して代入で可能
d=CDbl(rng)
あと行列逆転はFor〜Nextで1セル毎にループでできるが、一括でできる方法はないかな?
0912デフォルトの名無しさん
2008/03/06(木) 08:45:450913デフォルトの名無しさん
2008/03/06(木) 09:06:42ExecuteExcel4Macroなんか使って読みにくく、また他に使い途もないコードを書くより、
ADO使って"SELECT * FROM [Sheet1$]"みたいにやった方が、将来的に考えて
色々と応用できて幸せになれる確率が高いぞ
0914900
2008/03/06(木) 09:50:11ExdcuteExcel4Macroは使わない方針でいってみたいと思います。
0915デフォルトの名無しさん
2008/03/06(木) 09:59:52>>909
0916デフォルトの名無しさん
2008/03/06(木) 10:11:06ツール→マクロ→マクロとメニュー選択した際のダイヤログボックスに
表示させない方法があったと思うのですが、
どうやればいいでしょう????
0917初心者
2008/03/06(木) 11:40:13A1からA10に数値の値が入っているとします。
もしこのA1からA10までの値がすべて0だったら、○○というプログラムを実行する、というマクロを組みたいと思っています。
If Worksheets("Sheet1").Range("A1:A10") = 0 Then
Call ○○
End If
というふうに自分では作ってみたものの、うまくいきません。
アドバイスの方よろしくお願いします。
0918デフォルトの名無しさん
2008/03/06(木) 15:42:25シート作成は速度の関係上できるかぎり避けたいのです。
関数やプロパティで行列を逆に入れ替える方法はないでしょうか?
0919デフォルトの名無しさん
2008/03/06(木) 15:47:34計測してから物を言え。
0920デフォルトの名無しさん
2008/03/06(木) 16:12:20dim 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
0921デフォルトの名無しさん
2008/03/06(木) 16:13:18if worksheets("sheet1").range("a1")..offset(i,0).text <> "0" then exit for
が正解。
0922デフォルトの名無しさん
2008/03/06(木) 16:47:13シート作成するのが通常よく使うよね。
VBAではあまり速度を問われないことがおおいから。
私もそうですし他の方法しか教えられない。
>>918
気長にVBAスペシャリストを待ちましょう。
0923919
2008/03/06(木) 16:53:130924デフォルトの名無しさん
2008/03/06(木) 17:02:20・行列を変換しながら1セルごと配列にコピー
・rangeを配列にまるごとコピーした後に、行列を変換しながら別の配列に代入
・行列を変換して別のシート(同じシートでもいいが)にコピーしてから、rangeを配列にコピー
実行する内容や量やExcelのバージョンやPCのスペックによって変わるから、
自分で測って一番速い奴を使え。
0925デフォルトの名無しさん
2008/03/06(木) 17:24:23dim rng as range
dim d as variant
set rng = worksheets("sheet1").range("a1:c3")
d = application.worksheetfunction.transpose(rng)
0926デフォルトの名無しさん
2008/03/06(木) 18:43:57あたしシートの追加をしたいのぉ
Sub Macro1()
Dim unko As String
unko = "ウンコ"
Sheets.Add ?????
End Sub
変数名を取得して、その変数名をシート名としたシートを追加したいというかぁ
リネームじゃなくて、ダイレクトに追加できればいいなぁとおもうの。
エロイ人おしえてーー。
0927デフォルトの名無しさん
2008/03/06(木) 20:07:32dがVariant型でよければ、
d = WorksheetFunction.Transpose(Range("A1:C3"))
でdには縦横入れ替えた2次元配列が格納される。
0929デフォルトの名無しさん
2008/03/06(木) 20:38:03そういう時は、dummyで使わない引数をプロシジャの()の中にセットする様にしているけど邪道か?
0930デフォルトの名無しさん
2008/03/06(木) 21:14:07dim 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))に代入しました。
かなり速度が改善しました。
ありがとうございました。
0931デフォルトの名無しさん
2008/03/06(木) 21:15:090933デフォルトの名無しさん
2008/03/06(木) 23:06:52book1を開きながらbook1ファイルは削除できまい。
あと、book1は何処に保存してあるのか。
0934デフォルトの名無しさん
2008/03/07(金) 00:08:32誰に言ってるの?
必要ならつけりゃいいが、必要ない場合もある。
たとえばシートモジュールでMe.なんてウザイだけ。
0935デフォルトの名無しさん
2008/03/07(金) 00:24:40何だよヴォケ!
クラスを明示するの当たり前だろ?
>>925みたいなコードもブックから明示してないからまだまだだね。
ブックの上のApplicationも明示しないとね。
0936デフォルトの名無しさん
2008/03/07(金) 03:21:54こどもじゃあるまいし、書いてることをそのまま実行したりはしないよ。
ヒントがわかれば十分。
0937926
2008/03/07(金) 05:40:25もしくは、追加→リネーム の方法がベストなのでしょうか。
bookを開いてから、何枚のシートを追加したかの監査変数を使う事が避けられれば理想なのですが・・。
皆さんどのようにしているのかも興味があります。
何卒よろしくお願いします。
お礼にこれあげます。>+(
0938デフォルトの名無しさん
2008/03/07(金) 07:08:02sheets.Add().name="ウンコ"
0940デフォルトの名無しさん
2008/03/07(金) 08:30:45一応マジレスしておくと、質問するならふざけるな。
ふざけないで質問してたらきっと即レスついたはずだ。
0941895
2008/03/07(金) 09:04:48>あと、book1は何処に保存してあるのか。
これは、C:\Documents and Settings\xxx
と指定すればいいのでしょうか?
0942895
2008/03/07(金) 09:17:12を設けて(例えばパスワードは10)他の人に勝手に開かれないようにしてるのですが
人のPCのデータを除き見るやから達からデータを守る為、パスワードの入力を
例えば3回失敗したらファイルごと、どこのディレクトリに合っても強制削除したいのですが
どうコードを書いたらいいのでしょか?
0943デフォルトの名無しさん
2008/03/07(金) 10:34:010944デフォルトの名無しさん
2008/03/07(金) 11:05:26おろ?
君は>>925と>>931じゃなかったの?
似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。
ってか彼はうるさい割にはいつもシートからしか明示しないがね。
0945925
2008/03/07(金) 11:16:260946デフォルトの名無しさん
2008/03/07(金) 13:19:45「同一モジュール内に同名の行ラベルを設置できない」
って書いてあったので、検証しようと思い以下のサンプルコードでテストしました。
' プロシージャ「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本が間違っているのでしょうか???
0947デフォルトの名無しさん
2008/03/07(金) 13:46:18はい、その通り間違っているので、書名を公開してみんなが不幸せになるのを防ぎましょう。
0948デフォルトの名無しさん
2008/03/07(金) 20:56:100949デフォルトの名無しさん
2008/03/07(金) 21:02:210950デフォルトの名無しさん
2008/03/07(金) 21:29:13Sub 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
0951デフォルトの名無しさん
2008/03/07(金) 22:47:43それ、マクロ無効にすると開けちゃうから。
0952デフォルトの名無しさん
2008/03/07(金) 23:48:02別件(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の馬鹿を一人知ってるんだが。
> ってか彼はうるさい割にはいつもシートからしか明示しないがね。
0953デフォルトの名無しさん
2008/03/08(土) 00:04:09XP SP2
ブックを非表示にして、フォームをタスクトレイに常駐させてタイマー処理は実装可能でしょうか?
教えてエロい人
0954デフォルトの名無しさん
2008/03/08(土) 04:24:550956デフォルトの名無しさん
2008/03/08(土) 05:04:100957デフォルトの名無しさん
2008/03/08(土) 08:28:430958デフォルトの名無しさん
2008/03/08(土) 12:35:40悪いことは言わないからMougとやらで聖戦に興じてろや
釣りにしてもキモすぎるし、真性だとしても治療に付き合う義務はない
0959デフォルトの名無しさん
2008/03/08(土) 15:06:06シート名が特定できれば、一旦アクティブにして値をとって戻るとか出来るのですが
いろいろなシート(名)を対象に出来るようにと思っています
よろしくお願いいたします
0960デフォルトの名無しさん
2008/03/08(土) 16:48:31いらんおせっかい書くからだよ。
つまらん自説を述べるから粘着される。
0961デフォルトの名無しさん
2008/03/08(土) 23:07:05クラスモジュールだけ使ったことがない。これってどういう時に使うもんなんです?
Excel2002ですけど。
0962デフォルトの名無しさん
2008/03/08(土) 23:37:13VBAだと継承ができないんで、独自イベントを実装したいときとか、
構造体代わりに使うとか、コントロール配列を実現させたいときに
使うぐらいしかないけどね(^ω^;)
0963961
2008/03/09(日) 08:10:280964デフォルトの名無しさん
2008/03/09(日) 10:25:510965デフォルトの名無しさん
2008/03/09(日) 10:39:070966デフォルトの名無しさん
2008/03/09(日) 15:28:15だったと思うから
「継承代わりに使いたいときだけ」
しか使わん
0967デフォルトの名無しさん
2008/03/09(日) 18:58:31EXCELデータを、カンマ区切りの改行コードつきCSV形式で書き出したいのです。
↓このような感じ
項目1,項目2,項目3,改行コード(vbcrlf)項目1,項目2,項目3・・・
print # でコード記述
データの最後は改行コード(vbcrlf)で終了しなくてはいけないのですが、
そうすると当然のことですが、最後に余分な空白行ができてしまいます。
改行コードで終了するが、最後の空白行はなくす、ということは可能なのでしょうか?
「もう。無理です・・・」と泣きを入れてみたのですが、なんとかしろ、
とのお達しがあり、もし、良い方法があれば伝授いただければ助かります!!
宜しくお願いします。
0968エスパー君登場
2008/03/09(日) 19:20:080969デフォルトの名無しさん
2008/03/09(日) 19:26:29それはコードのバグ。
ファイルの末尾がCRLFで終わっているなら、余分な空白行など存在しない。
0970デフォルトの名無しさん
2008/03/09(日) 19:58:510971デフォルトの名無しさん
2008/03/09(日) 20:08:08「EXCEL VBA 改行コード」で検索していたのですが、
良い方法を見つけることが出来ず、悩んでいました。
頑張って挑戦してみます
0972デフォルトの名無しさん
2008/03/09(日) 20:55:390973デフォルトの名無しさん
2008/03/09(日) 21:06:19ちょっと待て。何をどう挑戦するつもりなんだ?
0974側近中の側近 ◆0351148456
2008/03/09(日) 21:56:06EOF直前の改行は本来必要なものと考えるが。
たまにEOF直前の改行がないテキストファイルを見るが、あれはどうなの?
ちなみにviだとエラーメッセージが出るぞ。
0975側近中の側近 ◆0351148456
2008/03/09(日) 22:01:32"aaa\r\nbbb\r\nccc\r\n"(\r\nは改行コード)
これを
"aaa\r\nbbb\r\nccc"
にしたいってことでしょ?多分。
「『なんとかしろ、』とのお達しがあり」
ってあるけど、その「なんとかする」理由は何だろうね?
何もないのに言ってるなら、その人にもうちょっと勉強しろって言いたいんだけどね。
0976側近中の側近 ◆0351148456
2008/03/09(日) 22:02:33おもいっきりスレ違いだね
いきててごめんね
0977デフォルトの名無しさん
2008/03/09(日) 23:01:200978デフォルトの名無しさん
2008/03/09(日) 23:18:21最後のレコードの後には改行はあってもなくてもいいらしい。
オレの場合は最後のレコードの後には必ず改行付けるけどね。
0979デフォルトの名無しさん
2008/03/09(日) 23:25:11aaa
bbb
ccc
I ← ここにカーソルが移動できる
ということを「最後に余分な空白行ができてしまう」と言っているんだと思った。
だとしたら、それは最後にCRLFを置いているからだとしか言いようがない。
0980デフォルトの名無しさん
2008/03/10(月) 01:26:00xp
他のシートの複数セルの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が入ってしまいます。
よろしくお願いします。
0981デフォルトの名無しさん
2008/03/10(月) 01:40:100982デフォルトの名無しさん
2008/03/10(月) 02:39:290983デフォルトの名無しさん
2008/03/10(月) 12:48:36「型が一致しません」というエラーが出るのですが、
例えばエラーセルの値をコンスタントに、「""」として処理するような
事は可能なのでしょうか?
VBAがセルのエラー値をどのように扱っているのか、
msgboxで出すことも出来ないので
困っています。
お知恵拝借できると幸いです。
0984デフォルトの名無しさん
2008/03/10(月) 13:04:330985デフォルトの名無しさん
2008/03/10(月) 13:38:140986デフォルトの名無しさん
2008/03/10(月) 13:39:510987983
2008/03/10(月) 14:27:26ありがとうございます。
どちらかの方法でやってみようと思います。
0988デフォルトの名無しさん
2008/03/10(月) 16:59:57それをVBAで行うにはどうしたらいいですか?
例えば.Cells(i,j)が選択してある状態で、さらにCells(i+10,j)を追加で選択するにはどうしたらいいですか?
.Cells(i,j).Select
hoge
.Cells(i+10,j)Select ←ここで、それまでの選択範囲に追加する形にしたい
0989デフォルトの名無しさん
2008/03/10(月) 17:23:03rangeに新cellを追加
追加したrangeをselect
0991デフォルトの名無しさん
2008/03/10(月) 19:46:03XP SP2
結構でかいファイルのI/Oやコピーなどの処理をワーカースレッドで行なうことは可能でしょうか?
0992デフォルトの名無しさん
2008/03/10(月) 20:46:02union
0993デフォルトの名無しさん
2008/03/10(月) 20:52:13条件分岐で、"A1"セルに何か入っている場合に実行、
空欄の場合はエラーメッセージを出したく思います。
if range("A1") = true then
msgbox("実行")
else
msgbox("空欄です。")
end if
としてみたのですが、思うように動作致しません。
てっきり、false = 0 、 true は何か要素がある。と頭にあったのでやってみたのですが、
VBAの壁にぶちあたっております。
何卒、ご助力を賜りたく存じます。よろしくお願いします。
0994デフォルトの名無しさん
2008/03/10(月) 20:57:490995デフォルトの名無しさん
2008/03/10(月) 21:21:05MsgBox "何か入っている"
Else
MsgBox "空欄"
End If
0996デフォルトの名無しさん
2008/03/10(月) 21:35:390 = false、 0以外 = true
0997デフォルトの名無しさん
2008/03/10(月) 22:03:18ではどうか
0998デフォルトの名無しさん
2008/03/10(月) 22:47:48検証してる間にスレ落ちしてしまうと申し訳ないので、お礼だけ先に。
明日検証いたします。
本当にありがとうございました。
0999デフォルトの名無しさん
2008/03/11(火) 08:20:171000小倉優子 ◆YUKOH0W58Q
2008/03/11(火) 08:20:3710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。