07/12/12 17:28:23
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
3:デフォルトの名無しさん
07/12/12 17:29:01
・過去スレ
01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04 スレリンク(tech板)
4:デフォルトの名無しさん
07/12/12 17:29:50
テンプレの最中にuncoを挿入する
5:デフォルトの名無しさん
07/12/12 17:53:17
セル1に「1」と入力するとセル2に「A」と出力,同様に「2」と入力すると「B」と出力するようにするためにはどうすれば良いですか?
どなたか教えてくださると助かりますm(_ _)m
6:デフォルトの名無しさん
07/12/12 18:04:32
いつまでやるんだよ・・・
7:前スレのクレクレ君
07/12/12 18:16:45
いや、私じゃないですよ
8:デフォルトの名無しさん
07/12/12 18:31:18
前スレの>>1000へ
hoge = Selection.Value のSelectionが結合セルだと2次元配列になる。
結合セルをSelectしないでhoge = Range("A1").Value とすれば2次元配列にならない。
2次元配列なら MsgBox hoge(1,1) としないと動かないが、2次元配列じゃなければ
MsgBox hoge で動く。
9:前スレのクレクレ君 = 1000
07/12/12 18:37:44
>>8
な、なるほど!
10:デフォルトの名無しさん
07/12/12 18:48:01
>5
セル2に式「=CHAR( セル1 + 64 )」をいれときゃいいんでね?
VBAは関係ないけど。
11:デフォルトの名無しさん
07/12/12 19:08:09
1. 1900年から2008年までのうるう年を見つけて、一個のメッセージボックスにすべてのうるう年を表示するようにプログラムを作成する。
2. 下記の数値の和を繰り返し文を使用して算出しなさい。
1+2+3+4+……+100
1の二乗+2の二乗+3の二乗+……+20の二乗
1の三乗+2の三乗+3の三乗+....+20の三乗
これをExcelVBAを使って解かなきゃいけないんだけど全くわかりせん。
どなたか教えていただけませんでしょうか。
12:デフォルトの名無しさん
07/12/12 19:21:00
>>2
>★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
> コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
> ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
13:デフォルトの名無しさん
07/12/12 19:46:39
>>11
1. MsgBox 閏年 & 閏年 & 。。。
2. 1^2+2^2+3^2 。。。 +20^2
14:デフォルトの名無しさん
07/12/12 21:23:03
Sub 空白セル削除()
Worksheets("Sheet1").Activate
For i = 1 To 1000
If Cells(A, i) = "" Then
Cells(A, i).Delete shift:=xlUp
End If
Next
End Sub
これのダメなところを教えてください。
エラーが出るんですよね
15:5
07/12/12 21:33:13
>>10
おおっ ありがとうございます!!
スレ違いでしたねすみません
16:デフォルトの名無しさん
07/12/12 21:39:20
エラーで止まったところをヘルプで調べないお前の姿勢がダメだろう。
17:デフォルトの名無しさん
07/12/12 21:48:03
>>16
ワラタw
>>14
セルズA,iを 1,i に変えたらうごいたぜ。 Excel2007 だけどな。
18:デフォルトの名無しさん
07/12/12 21:49:00
もはや全部ダメって言い切って良いな
19:デフォルトの名無しさん
07/12/12 21:59:26
>>18
そうか?
Sub 空白セル削除()
ここら辺はわかりやすくてよい。
20:デフォルトの名無しさん
07/12/12 22:07:00
>>16
すいませんでした
以後気を付けます
>>17
thx
マクロはじめたばっかで基本的な勘違いをしてたぜw
>>18
是非参考コードをお願いします。
21:デフォルトの名無しさん
07/12/12 22:41:02
Mougでも隅から隅まで眺めてこい
22:デフォルトの名無しさん
07/12/12 22:57:16
なんだ自分ではたいしたコード書けないのにコード乗ってるサイト知ってるだけで出来ると思ってる人間かw
23:デフォルトの名無しさん
07/12/12 23:45:19
oshietekun
you ga sundara
beroberobaa
24:デフォルトの名無しさん
07/12/13 20:55:37
Rangeのポインタを渡すにはどう記載すればよいでしょうか?
25:デフォルトの名無しさん
07/12/13 21:16:51
逆にRangeの実体を渡す方法があったら教えて欲しい
まあインデックスのポインタのことだろうけど
26:デフォルトの名無しさん
07/12/13 21:41:43
byvalとbyrefの話?
27:デフォルトの名無しさん
07/12/13 22:37:33
Dim Data AS Variant
Dim d AS Variant
Redim Data(1,20)
Redim d(1,60)
dには{1,4,3,~(60個の数値)~}が入っている
kukanにも区間データ(20個)が入っている。
Data(2行目に入れたい)=Worksheetfunction.Frequency(d,kukan)
→Data二次元配列の2行目に答えを入れるにはどう記載すればよいでしょうか?
28:デフォルトの名無しさん
07/12/14 01:08:47
userformのspinbuttonでmouseupしたときに押し続けまでカウントされた値を
処理できますか たとえば1から100までアップしたとき
changeだと100回処理しなけらばならないので
mouseupで100の値についてだけ処理したいのです
29:デフォルトの名無しさん
07/12/14 05:42:32
マジな回答が欲しいヤツは、とりあえず解読可能な質問をしる
30:デフォルトの名無しさん
07/12/14 07:42:42
>>27
dに60個のデータって、61個じゃないのか?
それにDataもdも整数なのになんでVariant型?
それはおいとくとして、ループを回せばいいだろ
f = Worksheetfunction.Frequency(d,kukan)
For i = LBound(Data,2) To UBound(Data,2)
Data(1,i) = f(i + 1,1)
Next
31:デフォルトの名無しさん
07/12/14 07:52:37
>>30
> >>27
> dに60個のデータって、61個じゃないのか?
確かにそのとおりです。
> それにDataもdも整数なのになんでVariant型?
二次元配列を使っているので。配列はVariant型って考えは間違っていますか?
> それはおいとくとして、ループを回せばいいだろ
> f = Worksheetfunction.Frequency(d,kukan)
> For i = LBound(Data,2) To UBound(Data,2)
> Data(1,i) = f(i + 1,1)
> Next
Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので、それを二次元配列Dataに入れたいのです。
32:デフォルトの名無しさん
07/12/14 07:57:53
>>31
>二次元配列を使っているので。配列はVariant型って考えは間違っていますか?
間違ってる。整数なら普通IntegerかLong
>Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
Frequencyの戻り値は1ベースの2次元配列だろ?
33:デフォルトの名無しさん
07/12/14 08:09:57
補足しとくが
Dim Data() As Long
みたいに宣言するんだからな。
34:デフォルトの名無しさん
07/12/14 08:20:37
もしかしてDataとかdにはセル範囲の値を一括して代入してるのか?
だったらVariantでいい。ただRedimは不要。
35:デフォルトの名無しさん
07/12/14 08:50:14
>>34
> もしかしてDataとかdにはセル範囲の値を一括して代入してるのか?
> だったらVariantでいい。ただRedimは不要。
逆です。Dataの値を後でセル範囲に一括して代入します。
Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。
36:デフォルトの名無しさん
07/12/14 08:54:53
>>32
> >Frequencyの答えは一つの数字ではなく一次元配列でかえってくるので
> Frequencyの戻り値は1ベースの2次元配列だろ?えっ!?区間と度数の二次元配列ですか?調べたつもりが。。。
ということはfをあるセル範囲(2×n)に代入すればよいということですね。
37:デフォルトの名無しさん
07/12/14 09:28:16
>>36
>Redimは不要なのですか?行や列の数を指定しなくてもいいのですか。
Variant型の変数に代入する場合不要ということ。
d = Range("A1:E1").Value
みたいなときのことね。
>区間と度数の二次元配列ですか?
度数だけの2次元配列。
>ということはfをあるセル範囲(2×n)に代入すればよいということですね。
2×nじゃなくて1×n
縦じゃなくて横なならTransposeしないと出来ない。
縦1列ならそのまま可
38:デフォルトの名無しさん
07/12/14 09:58:09
vbaのreplace関数って、指定の文字列がない時に何か
値を返すことって出来ます?
置換前の文章と照合するしかにあ?
39:37
07/12/14 10:29:12
補足しとくがdとかkukanがセル範囲から取り込んだものなら、そんな配列は必要ないからな。
仮にデータがA1:A61にあり、区間がB1:B20なら
f = Worksheetfunction.Frequency(Range("A1:A61"),Range("B1:B20"))
でいい。引数を変数にするならRange型だ。
戻り値は区間より一つ多い11x1,の2次元配列になってる。
一つ多いのは区間の最後のデータより大きいもののカウント用
40:デフォルトの名無しさん
07/12/14 10:33:22
>>38
置換前の文字列と照合するか、先にInStrで調べてからでもいいんじゃない?
41:39
07/12/14 10:35:05
マチガイ
戻り値は区間より一つ多い21x1の2次元配列な
42:デフォルトの名無しさん
07/12/14 10:59:42
replaceだけ、頭文字が大文字にならないのは仕様ですかw
43:デフォルトの名無しさん
07/12/14 11:10:28
>>40
あ、そうか
44:デフォルトの名無しさん
07/12/14 16:16:50
aaapapaaaaaaapaaaap という文があったとして、
これをp毎に分割するにはどうすればいいでしょうか。
instrでpの場所を探して、その文字数分leftで取り出せばいいと思うのですが
もっといい方法は無いでしょうか。
45:デフォルトの名無しさん
07/12/14 16:39:59
>>44
VB6スレいけ
46:デフォルトの名無しさん
07/12/14 16:57:07
VB6スレって、2バイト文字ばっかりじゃないですか
47:デフォルトの名無しさん
07/12/14 17:32:08
>>46
行けばわかる
48:デフォルトの名無しさん
07/12/14 18:16:47
>>44-46
そんなに目くじらたてなくてもいいんジャマイカ
pで分割してセルに書き込むのかも知らんしだろ?
つSplit関数
49:デフォルトの名無しさん
07/12/14 18:25:14
>>42
Replace関数もReplaceメソッドも頭文字は大文字になるぞ?
変数の宣言で使ってるとかプロシージャ名で使ってるとかなんか変なことしてるんじゃない?
50:デフォルトの名無しさん
07/12/15 22:48:14
独学するのにお勧めの書籍ありませんか?
プログラミングは初心者です。
かつてHTMLとCSS、javascriptをほんの少しだけ学校の夏期講座で勉強した程度です。
51:デフォルトの名無しさん
07/12/15 23:07:13
>>50
Excelでお仕事
でぐぐる
「VBA基本」を見る
書籍不要。
52:デフォルトの名無しさん
07/12/16 00:25:54
>>51
そこだと変なクセがつかないか?
最近見てないけど、前みたときはあまりいい内容ではなかった。
53:デフォルトの名無しさん
07/12/16 10:42:55
>>50
VBAエキスパートの参考書をやってから
あとはリファレンスとして上記のEXCELでお仕事を参照すればいいと思う
54:デフォルトの名無しさん
07/12/16 15:21:49
稚拙なHPを読んで機会損失するコストを考えたら、3,4千円の書籍を購入する
コストは非常に安い。
55:デフォルトの名無しさん
07/12/16 15:40:30
どの言語もそうだけど最終的に書籍はリファレンスだけしか要らなくなる
56:デフォルトの名無しさん
07/12/16 18:59:33
あのサイトの人、VBAに関してはかなり下手だぞ?
VBAのリファレンスにはならねーな。
57:デフォルトの名無しさん
07/12/16 19:37:34
ほとんどの人が代案を出せずに
一人の出した案を叩くばかりという状況にワロタ
まあ、ここの回答陣がVB(A)初心者だったのが
何年前かと考えると…
古すぎてもう売ってないとか
対応バージョンがExcel95とか、
当時はWebとかほとんど無かったとか
そもそも他言語から入ったとかだろうから
仕方ないだろうけど。
>>50
まあAmazonの書評でも見るか
(これもあてにはならないが、ここよりは…)
もしくは適当なVBA本の著者名でぐぐると
サイト持ってて入門編を公開している人もいたりする。
58:デフォルトの名無しさん
07/12/16 21:25:06
田中亨おすすめ。
mougの人は嫌い。
59:デフォルトの名無しさん
07/12/17 10:52:50
>>49
replaceは名前としては一切使ってないのですが
(過去にそのプロシージャ内で使ったことがあるかも・・・)
なぜか、小文字です・・・。
あと、古いExcel97では、replace使えないんですね。ショック・・・
サブルーチンで誰か作ってないかな。
60:デフォルトの名無しさん
07/12/17 10:59:20
>>48
ありがとうございます
61:デフォルトの名無しさん
07/12/17 14:47:55
>>59
Excel97でもOSが古すぎない限り(古くてもWSHをインストールすれば)
ツール→参照設定で
「Microsoft VBScript Regular Expressions 5.5」に参照設定して
RegExpオブジェクトの.Replaceを使えば
ただしReplace関数より機能は高いが
正規表現な分ハードルも高い。
62:デフォルトの名無しさん
07/12/17 17:55:16
>>61
ウホッ
確かに難しそうだ
63:デフォルトの名無しさん
07/12/17 18:15:07
>>59
横レスだが、折れも、ずいぶん前に、何ヶ月前ぐらいかな?
何かの時にrangeが1カ所だけRangeにならないことがあった。いろいろと試していたときだった。そこだけ、いろいろと書き直しても小文字のままだったので、
折れも同じように、気になって聞いたが、誰も答えようがなかったみたいだった。
チャンと動いておれば、気にしないでオケw
64:デフォルトの名無しさん
07/12/17 19:04:02
*.shapes(1).DrawingObject.Text = *.Cells.Value(1.1)
' ↑(Chart) ↑(Sheet)
EXCEL2000だと正常に動作する上記のようなコードがあります。
EXCEL2007だと、
"指定したコレクションに対するインデックスが境界を超えています。"
というようなエラーが出てしまいます。
(上記コードをコメントアウトすると正常終了します)
普通のシートのセルの文字列を、グラフシートのラベルにコピーする
コードなのですが、2日ほどひたすら検索しましたが、
何が原因なのかがわからない状況です。仕事場からソースを持ち帰ること
ができないので、これだけでは解析不能かもしれませんが、
何かヒントでも頂けたら幸いです。よろしくお願いいたします。
65:デフォルトの名無しさん
07/12/17 19:58:17
マクロを記録して味噌
66:デフォルトの名無しさん
07/12/17 20:16:50
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Select
Selection.Delete shift:=xlShiftUp
で「A列に何も入っていない行」を削除できますが、
「A列およびB列に何も入っていない行」は削除できませんでしょうか?
Range("A:B").~とすると
「A列もしくはB列に何も入っていない行」になってしまいます。
結局for~nextでCells(i,1).value&Cells(i,2).value=""かどうか調べて、みたいなので
動くことは動いたんだけどなにか簡単な方法はないかと。
67:デフォルトの名無しさん
07/12/17 22:04:20
>>64
前後関係意味不明
上限がいいかげんなループの中でShape回してるんジャマイカ?
>>66
ない
Range("A:B")とやったところで内部的には1次元でしかないので
68:デフォルトの名無しさん
07/12/17 22:35:37
ユーザーフォーム(モードレス)を残してワークシート最小化し
フォーム上のボタンを押してファイル選択ダイアログをだしているんですが
ファイル選択ダイアログがマウスクリックを受け付けてくれません
EXCEL 2000だと問題なく動くのですがEXCEL XPだとこの症状がでます
回避策ないでしょうか
69:デフォルトの名無しさん
07/12/17 22:42:18
コードさらせアホが。二度手間じゃ
70:デフォルトの名無しさん
07/12/17 22:51:51
こんな感じです
Private Sub Workbook_Open()
Dim oldState
oldState = Application.WindowState
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"
UserForm1.Show vbModeless
End Sub
Private Sub CommandButton1_Click()
Dim fname As String
fname = Application.GetOpenFilename(fileFilter:="txtファイル(*.txt),*.txt,txtファイル(*.txt),*.txt", Title:="txtファイルを選択")
If fname = "False" Then
Exit Sub
End If
End Sub
71:デフォルトの名無しさん
07/12/18 12:32:52
inputboxを、カイル君や冴子先生のようにするには?
とカイル君に聞いても教えてくれなかった。
72:デフォルトの名無しさん
07/12/18 12:56:20
モードレスは対応するバージョンがあるぜ
73:デフォルトの名無しさん
07/12/18 14:14:14
inputboxの外観でググっても出ないな。
74:デフォルトの名無しさん
07/12/18 17:24:28
>>68
何も確認せずにレスするんで恐縮だが、最小化じゃなくて、非表示(App~.Visible)とかじゃダメ?
75:デフォルトの名無しさん
07/12/18 18:54:33
>>65
>>67
ありがとうございました。
マクロの記録で確認しましたところ、shapes~となるのですが、
そのコードで再度実行すると、やはりそこでエラーになってしまいました。
それからまたいろいろと調べていたところ、下記を参考にして解決いたしました。
やはり、EXCEL2007が原因だったようです。
URLリンク(www2.moug.net)
76:デフォルトの名無しさん
07/12/18 19:33:13
コントロールを扱うための知識はコントロールそのものではなく、
実はコレクションってのがVBAの真理だったりする
77:デフォルトの名無しさん
07/12/18 22:55:28
>>74
指摘のとおりに変えたらEXCEL XPで動きました ありがとうございます
明日EXCEL2000でも確認してみます
78:デフォルトの名無しさん
07/12/19 05:50:53
特定の範囲内でランダムに1つのセルの値(文字列)だけ残して他を消す(又は表示させない)
ようにしたいんですがなにか方法ないでしょうか。
ランダムに複数セルの値を取得する→消去 の流れでいいんでしょうか。
ご教授願います。すれ違いだったらすいません。
*例えばA1~A5に文字列が入力されていて、マクロを実行したらA1のセルの値のみがのこって他を
消すようにできないかと思います。
79:デフォルトの名無しさん
07/12/19 09:42:17
マクロ歴三日の私が通りますよ
Sub rand()
Range("D" & 1).Formula = _
"=round(rand(),1)*10"
i = Range("D1").Value
Range("A" & i).Select
makura = MsgBox("are you sure to erase?", vbOKCancel)
If makura = vbOK Then Selection.ClearContents
End Sub
80:デフォルトの名無しさん
07/12/19 09:46:00
あ、残すのか・・・
英語とか・・・色々すまん煎ってくるわ
81:デフォルトの名無しさん
07/12/19 10:06:52
Sub rand()
yarinaosi:
Range("D" & 1).Formula = _
"=round(rand(),1)*10"
i = Range("D1").Value
If i = 0 Then GoTo yarinaosi
Range("A" & i).Select
Selection.Cut
Range("B" & i).Select
ActiveSheet.Paste
Range("A1:A10").Clear
Range("B" & i).Select
Selection.Cut
ActiveCell.Offset(0, -1).Select: ActiveSheet.Paste
End Sub
82:デフォルトの名無しさん
07/12/19 12:15:59
>>81
その式だと10になる確率が低いんじゃねーのか?
9になるのはround(rand(),1)が8.5以上9.5未満の1の幅があるが
10になるのは9.5以上で半分の幅しかねーな。
ROUNDなんか使っちゃいかんよ。
Range("D1)..Value = Int(Rnd*10)+1
とすれば1~10の確率はそれぞれ10パーセントだ。
83:デフォルトの名無しさん
07/12/19 12:20:56
ちょっと書き直し
9になるのはrand()が0.85以上0.95未満の0.1の幅があるが
10になるのは0.95以上で半分の幅
84:79,81
07/12/19 14:14:48
>>83
うーむ、なるほど。
85:デフォルトの名無しさん
07/12/19 17:53:38
絶対パス付きを取得し、変数filepathに、ファイル名をfilenameに入れて、ファイルを開こうとしています。
しかしフォルダ名に空白があると存在しませんとエラーがでます。
openfile filepath & filename
どのように書けばよいのでしょうか?
86:デフォルトの名無しさん
07/12/19 18:00:58
openfileが悪さしてる
87:デフォルトの名無しさん
07/12/19 18:06:15
trimしてみては?
88:デフォルトの名無しさん
07/12/20 05:13:01
htmlの指定したタグの中身を取り出す関数(メソッド?)ってどういうものでしたっけ?
GetOuterHtmlみたいな感じの名前でしたが、手元にVBがなく、ググってもでてこない
89:デフォルトの名無しさん
07/12/20 07:41:31
分かってないのに分かったような物言いをしたところで間抜けであることは変わらない
90:デフォルトの名無しさん
07/12/20 09:53:17
>>88
スレ違い
91:デフォルトの名無しさん
07/12/20 11:06:38
以前質問させてもらった者ですが
1+2+3+4+……+100
この和を繰り返し文を使用して出せというのがいまだにわかりません。
この場合For文を使えばいいんでしょうか?
無知で申し訳ないです。
92:デフォルトの名無しさん
07/12/20 11:39:16
>>91
スレ違い For文でできる。 どうしても分からなければVBスレで。
93:デフォルトの名無しさん
07/12/20 12:07:29
dim a(100) as integer
for i=1 to 100
a(i) = i
next
msgbox (a(1) + a(100))/2*100
94:デフォルトの名無しさん
07/12/20 15:01:54
>>90
以前エクセル付属のVBAで使った記憶があるのですが
95:デフォルトの名無しさん
07/12/20 15:13:37
>>94
Microsoft HTML Object Libraryを参照設定して、F2でMSHTMLを眺めて、ググるなりしろ。
これ以上の質問はVBスレでやれ。
96:デフォルトの名無しさん
07/12/20 16:04:23
>>93
ワロタw
97:デフォルトの名無しさん
07/12/20 16:19:13
Sub nnn()
Dim a As Variant
Dim i As Byte
Dim sentence As String
Dim sentence2 As String
''''''''''''''''''''''
Range("A1").Formula = "I am Japanese."
a = Array("I", "am", "Japanese", "living", "in", "USA", ".")
For i = 0 To 6
sentence = Range("A1").Value
sentence2 = Replace(sentence, a(i), "", 1)
Next i
MsgBox sentence2
End Sub
このプログラムで、sentenceをa配列全て使って、
置換したいのですが、
array中の最後の文字しか変換されません。
どうすればよいでしょうか...
98:デフォルトの名無しさん
07/12/20 16:32:06
>>97
かろうじてExcel要素が混じってるが、基本はExcel関係ないぞ。
Forの行にブレークポイントを設定して、ステップ実行させながら、変数の中を見てみろ。
99:デフォルトの名無しさん
07/12/20 17:03:25
>>98
置換したはずの文字が、ふ、ふ、復活しているよっ!
100:デフォルトの名無しさん
07/12/20 17:14:26
あ、sentence2はsentenceでいいのか。
むずかしい
101:デフォルトの名無しさん
07/12/20 18:53:05
とりあえずUSAには定冠詞のTheを付けるように
102:デフォルトの名無しさん
07/12/20 19:18:31
>>91
学校の宿題だったっけ?
>>93のFor Nextで合格点もらえるよ。
103:97
07/12/21 09:11:06
この文の位置か・・・
sentence = Range("A1").Value
104:デフォルトの名無しさん
07/12/21 19:29:12
もしかしてVBAってMax(i1,i2,i3)みたいなのって無し?
セルの比較ならApplication.Maxとかでいいけど変数の最大値を取得したいときはどーすれば?
105:デフォルトの名無しさん
07/12/21 20:31:42
セルに代入してapplication.max使えばいいんじゃね?
106:デフォルトの名無しさん
07/12/21 20:53:11
ヘルプ見ろよ
107:デフォルトの名無しさん
07/12/21 21:47:26
10分もありゃ汎用性の高い自作関数作れるだろ
108:デフォルトの名無しさん
07/12/22 00:34:48
汎用性の高い自作関数 例えば?
109:デフォルトの名無しさん
07/12/22 03:17:54
型の範囲を意識しなくていい関数はかなり便利
integerの範囲以上の値入れていちいちエラートラップするのはうざいからな
110:デフォルトの名無しさん
07/12/22 08:44:23
integerの範囲以上の値入れていちいちエラートラップする
・・
Variant・・・
111:デフォルトの名無しさん
07/12/22 13:51:20
丸め誤差を極力減らしたいのですが、式を記載する上で注意しておきたいことを教えてください。
112:デフォルトの名無しさん
07/12/22 16:26:16
>>111
整数で演算する
113:デフォルトの名無しさん
07/12/22 18:24:32
除算を使わない
114:デフォルトの名無しさん
07/12/22 18:26:38
計算をしない
115:デフォルトの名無しさん
07/12/22 19:43:29
電卓で計算して、Excelに手作業で貼り付け
w
116:デフォルトの名無しさん
07/12/22 22:39:18
極力ってことは・・・一気に計算したら?
117:デフォルトの名無しさん
07/12/23 00:08:32
>>116
よく本に掲載されているのは、ルートを有利化せずに分母においてるのがあるが、理由がよくわからなくて。
118:デフォルトの名無しさん
07/12/23 00:29:44
EXCELで
人人人人人
2 3 1 4
1 4 2 3
のように4人でゲームして順位を出す時に、
ちゃんと横の合計が10になるか計算したいのですが
こういう空欄はスルーして計算できませんでしょうか?
119:デフォルトの名無しさん
07/12/23 00:41:46
何も考えずにセル関数Sum使えば終わりでね?
120:デフォルトの名無しさん
07/12/23 00:58:34
>>119
その通りでした。どうもありがとうございます
実は例と少し違って合計0になるかだったので勘違いしてました
121:デフォルトの名無しさん
07/12/23 01:57:25
麻雀かw
122:デフォルトの名無しさん
07/12/23 04:18:28
>>117
コンピュータは分母が整数じゃなくても
それほど困らないからいいんじゃないの?
123:デフォルトの名無しさん
07/12/23 10:51:16
情報工学勉強すればわかる。
124:デフォルトの名無しさん
07/12/23 10:57:09
VBA使うのにいちいち情報工学など勉強しれられっか
125:デフォルトの名無しさん
07/12/23 11:07:39
VBAに必要な知識は、
1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。
言語に関わらず必要な知識は、
1.誤差伝幡をいかに少なくするか。
2.いかに高速なアルゴリズム(探索など)を知っているか。
3.その他多数~
126:デフォルトの名無しさん
07/12/23 16:14:05
> 1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。
開発効率という観点が欠如しているっぽいあなたには、アセンブラをオススメいたします。
127:デフォルトの名無しさん
07/12/24 00:21:03
>>111
桁に限界があるので技術計算には向かないが
固定小数点のCurrency型を使うとか。
128:デフォルトの名無しさん
07/12/24 02:05:32
>>111
除算をしないか、ロジックで極力計算回数を減らす。関数の戻りの型に注意。あと、スレ違い。
129:デフォルトの名無しさん
07/12/25 01:14:14
フォルダに0001~9999jpg
セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか?
よろしくお願いします
130:デフォルトの名無しさん
07/12/25 01:18:51
>>129
セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
4桁に制限したければそういうifを書けばいい。
131:デフォルトの名無しさん
07/12/26 00:02:45
>>93の人ありがとうございました。
1^2+2^2+3^2+……+20^2
1^3+2^3+3^3+・・・・+20^3
ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。
132:デフォルトの名無しさん
07/12/26 00:12:39
宿題か?宿題なのか?
133:デフォルトの名無しさん
07/12/26 00:24:08
そんなことより聞いてくれよ。
というか教えてください。
マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で?
やっぱりファイルが大きすぎるのか?
1ファイルで60MBとか無理なのか?
ご存知の方いたら助けてください。
134:デフォルトの名無しさん
07/12/26 00:29:42
>>133
うん、でかいw限界点とかはわからんが・・・
Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・
135:デフォルトの名無しさん
07/12/26 00:55:12
>>132
そうなんですよ。なんとかお助け願えないでしょうか?
136:デフォルトの名無しさん
07/12/26 01:06:14
for i=1 to 100
a = i
next
137:デフォルトの名無しさん
07/12/26 01:07:09
途中送信orz動作未確認
dim a as integer
for i=1 to 100
a = a + i * 2
next
3は2を変更で
138:デフォルトの名無しさん
07/12/26 01:21:16
>>131
ちょっとまて
>>93を採用する気か?それはなー(略
139:デフォルトの名無しさん
07/12/26 01:22:34
>>137
どいつもこいつも・・・ここはネタすれなのか?
140:デフォルトの名無しさん
07/12/26 02:24:13
>>138
え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。
141:137
07/12/26 02:37:44
すまん、俺は素だったんだw
汎用性もたせるなら累乗関数使うなり作るなりしてくれ。
dim a as integer
for i=1 to 100
a = a + i * i '2乗
'a = a + i * i * i '3乗
next
142:137
07/12/26 02:39:07
>>140
ちゃんとみりゃわかる。
>>97はforが入ってるが結局は(1+100)/2*100だ。
dim sum as integer
for i=1 to 100
sum = sum + i
next
143:137
07/12/26 02:40:02
はぁい、>>93の間違いねorz
スレ汚し失礼しました。
144:デフォルトの名無しさん
07/12/26 03:36:07
志村ー
100じゃなくて20・・・・
145:デフォルトの名無しさん
07/12/26 13:27:24
>>141>>142
たびたびすいません。これらをメッセージボックスに表示するには
どうしたらいいんでしょうか?
146:デフォルトの名無しさん
07/12/26 14:22:26
Option Explicit
Sub sum()
Dim sum As Integer
Dim sumMsg As Integer
Dim i As Byte
For i = 1 To 100
sum = sum + i
Next i
sumMsg = MsgBox(sum, vbOKOnly + vbInformation)
If sumMsg = vbOK Then MsgBox "やったね"
End Sub
147:デフォルトの名無しさん
07/12/26 14:23:38
共有ファイルでVBAを編集するには?
148:デフォルトの名無しさん
07/12/26 17:17:49
inputboxをキャンセルしたときの挙動なのですが、
これじゃだめですよね・・・
Sub nicochuu()
niwango = InputBox("入力してね", "inputbox")
If niwango = "" Then MsgBox "入力無し": Exit Sub
Range("A1").Value = niwango
If niwango = vbCancel Then Range("A2").Value = "キャンセル"
End Sub
149:デフォルトの名無しさん
07/12/26 18:33:01
横で開いてるIEを3行スクロールさせる方法教えてください。
excelは2000でIEは7です。
150:デフォルトの名無しさん
07/12/26 19:14:15
三流文系大に通う腐女子です。
以下のマクロ作成方法を教えてください。
プロシージャ「斜め移動」の作成
IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。
プロシージャ「四角移動」の作成
図形が四角形を描くように移動する(移動の軌跡が四角形になる)、
「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。
☆―→
↑ |
| |
| ↓
←―
プロシージャ「三角移動」の作成
「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。
ただし正三角形でなくてよい。
151:デフォルトの名無しさん
07/12/26 22:22:06
>>133
どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。
ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。
エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。
>>150
どう動かしたいかが良く伝わらない。
マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの?
あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?
152:デフォルトの名無しさん
07/12/27 02:33:46
セルを複数選択できないようにする(単一セルのみ選択可能)にはどう記載すれば実現できますか?
153:デフォルトの名無しさん
07/12/27 11:43:39
CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで
読み込みさせたいのですが、
Do Until EOF(intFF)
をどうすればいいのかわかりません。
お願いします・・。
154:デフォルトの名無しさん
07/12/27 12:41:59
>>152
これで目的の動作をするかどうかはわからないが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then
ActiveCell.Select
End If
End Sub
>>153
一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。
155:デフォルトの名無しさん
07/12/27 15:21:44
>>153
ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。
ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては?
スレリンク(tech板)l50
156:デフォルトの名無しさん
07/12/27 15:59:23
サンクスコ
スレ違いの基準が分からんぽ
157:デフォルトの名無しさん
07/12/27 16:50:30
スレ違いとかいう奴うぜー
いっそVB6スレと統合しろ
158:155
07/12/27 18:25:58
>>156
>>2
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。
159:デフォルトの名無しさん
07/12/27 19:15:14
アルゴリズムとかはVB6だろうけど
初心者はわからんだろうしなあ
まあそのときの気分であしらってるけどね
160:デフォルトの名無しさん
07/12/27 19:16:58
>>154
サンクスです。
161:デフォルトの名無しさん
07/12/27 19:19:39
>>158
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。
すべてこちらに包含するという考え方もある。
162:デフォルトの名無しさん
07/12/27 20:51:01
自治厨が湧いてきました
163:デフォルトの名無しさん
07/12/27 22:09:25
自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと
2chのルールやスレのルールを指摘するのは自治厨行為ではなく
逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について
164:デフォルトの名無しさん
07/12/28 02:04:11
どっちでもいい。はやく次の質問へ
165:デフォルトの名無しさん
07/12/28 09:36:53
>>2は別にこのスレの合意事項というわけではない。
過去スレのどこかで、誰かが勝手にテンプレに入れただけ。
なので、あまり気にするな。
166:デフォルトの名無しさん
07/12/28 09:43:01
そうでもないか
167:デフォルトの名無しさん
07/12/28 12:03:27
以下のケースでVBAの処理を止める方法は?(強制終了以外で
on error gotoでmsgboxに行く仕様になっているため、
あと50000回くらいmsgboxをokし続けなければならない。
escを押しても、msgboxのok扱いにしかならない。orz
168:デフォルトの名無しさん
07/12/28 12:14:00
電源断。
169:デフォルトの名無しさん
07/12/28 12:17:23
enterをテープで止めて、トイレ行ってる間に
終わってた。
170:デフォルトの名無しさん
07/12/28 12:27:46
msgboxのあとプロシージャをぬければいいんじゃね
171:デフォルトの名無しさん
07/12/28 12:31:09
もう実行しちゃった後の話よ
172:デフォルトの名無しさん
07/12/28 12:34:42
50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな
50000回押せばいいよな
173:デフォルトの名無しさん
07/12/28 12:48:51
>> 167
混じれ酢するとCtrl + Break
174:デフォルトの名無しさん
07/12/28 13:15:17
ありがとうござます
こんなキー初めて使うわ
175:デフォルトの名無しさん
07/12/28 13:25:13
>>174
押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。
176:デフォルトの名無しさん
07/12/28 15:12:43
良からぬsiteを見ている途中に、excelが勝手にsaveを始めて
あたふたすることってありますよね。
177:\_____________/
07/12/28 16:11:29
∨
|/-O-O-ヽ| ブツブツ・・・
| . : )'e'( : . |
` ‐-=-‐
/ \
||\ ̄ ̄ ̄ ̄ ̄ ̄ \
||\\. \ ∧_∧
||. .\\ \ ( ;´Д`) (オイ、なんか変なのがいるぞ)
. \\ \ / ヽ.
. \\ / .| | |
. \∧_∧ (⌒\|__./ ./
( ´,_・・`)目合わせるなって ∧_∧
. _/ ヽ \ ( ) うわー、こっち見てるよ
178:デフォルトの名無しさん
07/12/28 18:52:13
セル範囲から検索できるactivecell.findみたいな関数ありませんか?
(D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが
179:デフォルトの名無しさん
07/12/28 18:53:12
ってここVBAのスレじゃん
失礼。出直してきます
180:デフォルトの名無しさん
07/12/28 22:22:11
いきなり長文にて失礼します。
生年月日の昭和・平成をまるで囲むため、中を透明にした楕円を描き、マクロの
自動記録でできた次のものを使用してきました。
ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Excel2000~2003では、普通に使用できていましたが、2007では楕円の内部が
黒く塗りつぶされてしまいます。
ネットや本で調べてみたのですが、図形描画については記述があまり見つからず
私のスキルでは、難しそうです。
ご教授願えると助かります。
181:デフォルトの名無しさん
07/12/28 22:31:22
2007でマクロの自動記録すれば?
182:デフォルトの名無しさん
07/12/28 22:41:11
>>181
さっそくの書き込みありがとうございます。
やってみたのですが、2007では図形描画は自動記録できないらしいです。
私の調べた範囲では、どうやらExcel2007の仕様らしいです。
したがって、自分でマクロを組むしかないらしいのですが・・・
183:デフォルトの名無しさん
07/12/28 22:59:59
>>182
うーん、確かにその通りだった。ごめん。
ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・
184:デフォルトの名無しさん
07/12/28 23:02:29
連投すみません、180 ですが・・・
ちなみに"Set"を使って、次のようなのも試してみましたがだめでした。
Set MaruShape1 = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5)
MaruShape1.Fill.Visible = msoFalse
MaruShape1.Fill.Transparency = 0#
MaruShape1.Line.Weight = 0.75
MaruShape1.Line.DashStyle = msoLineSolid
MaruShape1.Line.Style = msoLineSingle
MaruShape1.Line.Transparency = 0#
MaruShape1.Line.Visible = msoTrue
MaruShape1.Line.ForeColor.SchemeColor = 64
MaruShape1.Line.BackColor.RGB = RGB(255, 255, 255)
185:デフォルトの名無しさん
07/12/28 23:06:15
>>183
184の書き込みが、前後してすみません。
アドバイスありがとうございます。
ShapeRangeのプロパティについてヘルプを調べてみます。
186:デフォルトの名無しさん
07/12/28 23:31:32
>>180の最終行に
Selection.ShapeRange.Fill.Visible = msoFalse
を追加してもダメですか
187:デフォルトの名無しさん
07/12/28 23:41:45
>>186
ありがとうございます。うちのパソコンはExcel2007が入っていないので
明日、職場で確かめてみます。
ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル
では、ちんぷんかんぷんです。
正直結構まいっています。
遅くまで、付き合ってくださってありがとうございます。
明日、結果を報告します。
188:デフォルトの名無しさん
07/12/29 01:32:16
うわー2007って全然違うな
うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?
189:デフォルトの名無しさん
07/12/29 11:10:53
>>188
おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。
190:デフォルトの名無しさん
07/12/29 11:38:28
2005と2007はどうとでもなりそうだが、
2002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。
191:デフォルトの名無しさん
07/12/29 11:39:16
>>190
ごばくった。なんとなく話題が似てた(笑
192:デフォルトの名無しさん
07/12/29 12:46:11
2007だとシェイプの位置がずれるんだけど、なんで?
193:デフォルトの名無しさん
07/12/29 23:05:11
>>186
昨日のアドバイスがヒントになって解決しました。
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
この2行を逆にしたらOKでした。ありがとうございました。
194:デフォルトの名無しさん
07/12/30 03:05:22
コマンドボタンを押すと、押したコマンドボタンを消したいのです。
CommandBotton1.visible=falseでも消えません。
CommandBotton1.BackStyle=0でも消えませんでした。
どのようにすれば消す、もしくは透明にすることができるのでしょうか?
よろしくお願いします。
195:デフォルトの名無しさん
07/12/30 03:26:42
>>194
Excel2000で試してみたが、
フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?
196:デフォルトの名無しさん
07/12/30 04:15:29
そりゃBottonで消えるのはボットン便所ぐらいですから
197:デフォルトの名無しさん
07/12/30 04:24:05
>>195
これなのですが、エラーがでてしまいます。
コマンドボタンを押したら、コマンドボタンを消す。
Private Sub CommandButton1_Click()
CommandBotton1.Visible = False
End Sub
198:デフォルトの名無しさん
07/12/30 04:25:09
>>195
ちなみに、ワークシートのコマンドボタンです。
199:デフォルトの名無しさん
07/12/30 04:35:52
>>196
解決しました。ありがとうございました。
200:デフォルトの名無しさん
07/12/30 11:34:38
ExcelVBAで出来ないことってなにかある?
高級言語覚えたい気持ちもあるんだけど
今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな
高級言語にステップアップしていいことあるかな?
201:デフォルトの名無しさん
07/12/30 11:56:55
Excelが無くても動くアプリが作れる
202:デフォルトの名無しさん
07/12/30 14:20:22
VBAは高級言語だぞ。
実行がExcelに縛り付けられていることは、言語自体の話とは別。
203:デフォルトの名無しさん
07/12/30 15:23:09
折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。
Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?
204:デフォルトの名無しさん
07/12/30 19:14:47
エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして
玉の発射とかの解説してるサイトって無いですか?
というか、シューティングゲーム作成の解説のサイトで良いのですが
なかなか見付からない・・・
205:デフォルトの名無しさん
07/12/30 19:27:53
ったく、専学はパーの製造装置でしかないな
206:デフォルトの名無しさん
07/12/30 19:30:28
>>204
学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w
素直に、マインスイーパみたいなヤツでいいと思うよ。
正直、オススメしないぞ。後で行き詰って困ることになる気がする。
ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。
207:デフォルトの名無しさん
07/12/30 19:42:39
>>206
いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw
敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど
あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと
208:デフォルトの名無しさん
07/12/30 19:58:57
excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが
利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。
そこで、いろいろと原因を探っているんですが、質問です。
シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか?
ご教授願います。よろしくお願いします。
209:デフォルトの名無しさん
07/12/30 20:07:39
>>207
よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。
オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。
210:デフォルトの名無しさん
07/12/30 20:41:33
>>209
㌧クス
挑戦してみる^
211:デフォルトの名無しさん
07/12/31 10:27:56
今日も今日とて仕事でVBA
212:デフォルトの名無しさん
07/12/31 10:41:25
大晦日も仕事か
お疲れ様です
213:デフォルトの名無しさん
07/12/31 13:33:39
いい句だなぁ。
214:デフォルトの名無しさん
07/12/31 15:45:45
かなり微妙な手当てが出たお
215:デフォルトの名無しさん
08/01/01 01:20:24
myPath = "C:\TEST\*.xls"
If Dir(myPath) <> "" then
Kill myPath
End If
だとDir(myPath)がオープンしっぱなしになるそうです。
どう書けば閉じるのでしょうか?
216:デフォルトの名無しさん
08/01/01 02:36:50
>>215
オープンもしてないモノを、どうしろと?
意味が分かってないなら、せめて本人に書き込ませろ。
ところで、あけおめ。
217:デフォルトの名無しさん
08/01/01 03:14:41
>>215
解釈1
if FileExists("hoge") then Kill "hoge"
解釈2
myPath = "C:\TEST\*.xls"
TargetPath=Dir(myPath)
Do Until TargetPath= ""
Kill TargetPath
TargetPath=Dir()
Loop
オープンは関係ないけどこのどちらかがやりたいのではないかと予想
218:デフォルトの名無しさん
08/01/01 13:14:44
開いていないファイルに書き込みパスワードが掛かっているか
どうすれば判定できますか?
ファイルをパスワードで開いてからだったら、
If ActiveWorkbook.WriteReserved Then
とかで判定できると思うのですが、パスワードは
不明でその有無だけ判定したいのです。
219:デフォルトの名無しさん
08/01/01 15:52:29
>>216
知らないのか?
myPath = "C:\TEST\"
Dir(myPath)
RmDir myPath
してみろ。オープンされてるから
220:デフォルトの名無しさん
08/01/01 16:16:33
あけましておめでとうございます。
>>208についてお願いしたいのですが・・・
221:デフォルトの名無しさん
08/01/01 18:29:49
>>219
・・・・
RmDir myPath
そのまま実行してみろ
ヘルプ読んで出直せ
222:デフォルトの名無しさん
08/01/01 18:32:05
ポカーン
223:デフォルトの名無しさん
08/01/01 19:24:31
>>220
ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。
保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。
これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。
224:デフォルトの名無しさん
08/01/01 20:45:14
1 2 3
1 10 20 30
2
------------
問題Y=1
問題X=1
回答Y=2
回答X=1
For i = 1 To 10
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) + Cells(問題Y, 問題X + 1), "問(i)")
回答X = 回答X + 1
問題X = 問題X + 1
Next
-------------
InputBoxにセル内の任意の数字(この場合"10+20")と表示させたいのですが、
上記のコードの場合、30と表示されてしまいます
セル内の数字を個別に表示させることは出来ますか?(真ん中に+などの記号を表示)
また、問1、問2と表示させていくためにはどうすれば良いのでしょうか?
この場合、問(i)で表示されてしまいます
225:デフォルトの名無しさん
08/01/01 20:53:20
+じゃなくて、&で結合すべし。
"問(i)"は、"問("&i&")"にする
226:デフォルトの名無しさん
08/01/01 21:05:59
>>225
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")")
にしたら出来ました^
即レスありがとうございました!
227:226
08/01/01 21:09:15
あ、問題X+2は問題X+1でした、失礼しました
228:デフォルトの名無しさん
08/01/01 21:28:11
>>223
そうですよね。VBAのテストをもっと増やしてみます。
ありがとうございます。
229:デフォルトの名無しさん
08/01/01 22:57:49
Excel 2003でXPです。
このプログラムを実行すると
Dim commission As Integer
Sub test8()
commission = 90
If commission = 100 Then MsgBox ("手数料は100円です")
End If
End Sub
コンパイルエラー
End ifに対応するブロックがありませんというメッセージが出ます。
どこが悪いのでしょうか?
230:デフォルトの名無しさん
08/01/01 22:58:28
thenでかいぎょうすべし
231:デフォルトの名無しさん
08/01/01 23:03:22
>>230
神様ありがとう!!!
232:129
08/01/02 02:53:03
>セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
すみません何をどうやったらいいのか全くわかりませんorz
とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします
233:デフォルトの名無しさん
08/01/02 04:29:21
そもそもVBAの経験があるのかと・・・
VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに
URLリンク(homepage1.nifty.com)
234:デフォルトの名無しさん
08/01/02 12:20:38
VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで
お勧めは逆引きのやつとかですか?
他にいいのあります??
235:デフォルトの名無しさん
08/01/02 13:10:25
ググれば山ほどサンプルが出てくる
236:デフォルトの名無しさん
08/01/02 21:18:58
かんたんプログラミング Excel 2003 これが一番良かった
237:デフォルトの名無しさん
08/01/02 21:27:35
>>236
まじっすか!?
とりあえず見てみるわ。
>>235
図書館にも死ぬほどあったw
238:かな
08/01/03 11:25:29
Excelであみだくじつくりたいんやけど、どっかにサンプルないかな?
セルつかうんじゃなくてちゃんと線を引いてやりたいんや?
239:デフォルトの名無しさん
08/01/03 12:43:46
しね
240:デフォルトの名無しさん
08/01/03 13:59:10
こんにちは。突然ですが
いろいろ試してみたんですけど
VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?
241:デフォルトの名無しさん
08/01/03 14:03:50
全然不可能じゃないとおもうけど・・・
242:デフォルトの名無しさん
08/01/03 14:17:15
>>240にはってこと?
243:デフォルトの名無しさん
08/01/03 15:30:45
乱数って少数の端数が出てしまうじゃないですか。
244:かな
08/01/03 15:32:36
誰かおしえて?
245:デフォルトの名無しさん
08/01/03 15:56:29
ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う
246:デフォルトの名無しさん
08/01/03 16:04:37
少数の端数てことはないだろ。
247:デフォルトの名無しさん
08/01/03 16:05:53
つCint
248:デフォルトの名無しさん
08/01/03 16:06:37
0になるだろ
249:デフォルトの名無しさん
08/01/03 16:10:19
CIntだろ
250:デフォルトの名無しさん
08/01/03 16:21:41
すごい釣りだなw
251:デフォルトの名無しさん
08/01/03 16:28:39
つMid(Rnd,3)
252:デフォルトの名無しさん
08/01/03 16:39:24
Replace(Rnd,".","")
253:デフォルトの名無しさん
08/01/03 17:02:32
Count = CInt(Rnd * N) + 1
hoge:
'ここで何かする
Count = Count - 1
If Count >= 0 Then
Goto hoge
End If
254:デフォルトの名無しさん
08/01/03 18:34:00
ループ中に乱数の値ってどんどん変わっていくんじゃない?
255:デフォルトの名無しさん
08/01/03 18:35:55
・・・。
>>254って本気で言ってるのか?
256:デフォルトの名無しさん
08/01/03 20:18:11
質問です。
実際に開発する環境はXP excel 2003で
学習環境はvista excel 2007なんですが、
何か学習書を購入するとき、2007に対応したものじゃないと
理解は難しいのでしょうか?
2007に対応したVBA書はまだ少ないように感じるもので・・・
257:デフォルトの名無しさん
08/01/03 23:17:50
確かに2007で変わった部分はある。でも基本部分(構文とかそういうの)は変わってない。
2007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。
258:デフォルトの名無しさん
08/01/04 02:25:11
構文規則(VB部分)は変わってないけど
オブジェクトメンバ(VBA部分)は結構変わったよ
一応古いメンバにもアクセス出来るようにはなってるが
新しいメンバより動作が遅かったりというデメリットもある
2007用だと新しい体系に関しての説明が主になるだろうから
実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと
259:デフォルトの名無しさん
08/01/04 06:26:50
EXCEL2002でVBAを書いています。
マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。
ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか?
セルに入力しようとしている文字列
='D:\[計算書.xls]20.1月'!$J$3
計算書.xlsの20.1月は存在しません。
下記、3つは記述済みです。
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
260:256
08/01/04 07:26:44
>>257-258
ありがとうございます。
詳しい解説があったほうがいいのでよく考えて選びます。
261:デフォルトの名無しさん
08/01/04 08:19:47
>>259
うちは出ない (2000, 2003)
262:デフォルトの名無しさん
08/01/04 08:31:34
>>259
どんなマクロを書いているんだ?
263:デフォルトの名無しさん
08/01/04 09:52:52
>>259
再現した。 ワークシートの存在を確認するしかないかな?
Dim s As Worksheet
For Each s In Me.Worksheets
If UCase(s.Name) = UCase("20.1月") Then
s.Range("A1").Value = "='D:\[計算書.xls]20.1月'!$J$3"
Exit For
End If
Next
あるいは、可能であればワークシート別のイベントで処理させるとか。
264:かな
08/01/04 09:57:33
だれか教えてん♪
265:デフォルトの名無しさん
08/01/04 10:43:44
>>238>>244>>264
URLリンク(www.google.co.jp)
まぁ釣りだとは思うんだけど…
266:まな
08/01/04 10:52:16
>>264
手とり足とり、組んずほぐれつ?
267:デフォルトの名無しさん
08/01/04 17:41:29
すいません、XPでEXCEL2003です。
複数のセルに数式が入れてあるのですが、
その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。
このようなことは可能でしょうか?
もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。
後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。
268:デフォルトの名無しさん
08/01/04 17:44:47
>261
EXCELの設定で表示しないようにできるんですかね・・・。
>262
NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る
~~~~~~
↑このシートは存在しない。
『シートの選択』ダイアログが表示される・・・。
>263
やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?
269:デフォルトの名無しさん
08/01/04 17:53:43
>>215
つOn Error
270:デフォルトの名無しさん
08/01/04 22:16:05
>>268
NW ?
271:263
08/01/05 11:58:51
>>268
シート作る必要があるの?
どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ?
>>270
どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・
272:デフォルトの名無しさん
08/01/07 17:08:47
XP、Excel2003で、改ページの枠を固定することはできるでしょうか。
この固定とは、保護等で管理者以外は触れないようにするということです。
ウィンドウの固定ではなく、改ページ範囲の固定です。
ご存知の方がいましたら、ご教授願います。
273:デフォルトの名無しさん
08/01/07 17:20:25
>>272 追記です。
結合したセルがあります。
そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、
入力のみ可能とすることはできますか?
ご存知の方がいましたら、ご教授願います。
274:デフォルトの名無しさん
08/01/07 20:01:11
対象とするアクションが起こった場合にパスワード等を求めるとかじゃだめかな?
275:デフォルトの名無しさん
08/01/07 23:30:12
テキストボックスの余白自動設定解除に手間取った。
なんか簡単な方法ってないの?
276:デフォルトの名無しさん
08/01/08 08:29:16
「手間取ってる」ではなく「手間取った」ってことは
一応目的は達成されてるわけだよね
ではそれを提示してください
コード貼ってもブックをうpしても構いません
そしたらそれより簡単な方法があれば教えましょう
それが嫌ならさようなら
277:デフォルトの名無しさん
08/01/08 12:52:16
散々既出ぽい話題ですが、エクセルで、
先頭の0を消さずにcsvで書き出ししたいのですが、
以下の式では当然不可能で・・・
Option Explicit
Sub eight()
Dim eight As String
Dim bigeight As String
Range("a1").Value = 8
bigeight = Range("a1").Value + 100000000
MsgBox bigeight
eight = right(bigeight, 8)
MsgBox eight
Range("A2").Value = eight
MsgBox eight
End Sub
関数で同じことをやると出来るのですがゴミデータが出て、
コンマの数が変わってしまいます。
278:デフォルトの名無しさん
08/01/08 13:17:17
変数の型について勉強しましょう
文字列数値と数値の違いを理解しましょう
プロシージャ名と変数名を同じにするセンスを何とかしましょう
279:デフォルトの名無しさん
08/01/08 13:48:25
>>277
セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)
280:デフォルトの名無しさん
08/01/08 14:13:45
>>279
おお。
これをVBAで指定するには?
281:デフォルトの名無しさん
08/01/08 14:18:49
てか、そもそもセルに転記しなければ良いのか(・∀・;)
282:デフォルトの名無しさん
08/01/08 14:53:59
>>281
転記するにしても、セル(範囲)ごと持っていけば済むよ。
Range("A1").Copy Range("A2")
283:デフォルトの名無しさん
08/01/08 15:06:19
あ、表示形式ってマクロ記録できるんだ。
これで、解決・・・かな
284:デフォルトの名無しさん
08/01/08 15:24:41
礼も言えないゆとりであった
285:デフォルトの名無しさん
08/01/08 23:22:13
質問なのですが、ユーザーフォームの中に80コのテキストボックスを作りたい。
プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?
286:デフォルトの名無しさん
08/01/08 23:45:08
あります
LeftとTopを調整しましょう
コード教えては厳禁
287:デフォルトの名無しさん
08/01/08 23:50:48
調整とはユーザーフォームの設定ということですか?
プログラムだけで可能なのですよね?
もう少しだけヒントをお願いできないでしょうか?
288:デフォルトの名無しさん
08/01/08 23:55:08
別にそこまで厳しくせんでも。 Excel2003ではできる。
Set ctrl = Me.Controls.Add("Forms.TextBox.1")
って感じに追加して、ctrlのプロパティを調整する。
MSFormsに追加するのに、これでいいのか?という気もするが。
289:デフォルトの名無しさん
08/01/09 00:14:18
できました!あとは80コスペースを空けて作る方法を考えてみます。
288さん有難う御座いました。
290:デフォルトの名無しさん
08/01/09 00:16:15
丸投げを助長する
寄生虫が増殖する
らしいです
291:デフォルトの名無しさん
08/01/09 00:33:43
丸投げと、できるだけズバリなヒントを欲しているのとは確実に違うと思うわけだが。
292:デフォルトの名無しさん
08/01/09 14:20:42
278=284=290
293:デフォルトの名無しさん
08/01/09 14:30:40
しかし>>284には同意せざるを得ない
294:デフォルトの名無しさん
08/01/09 14:36:58
礼なんぞいらん。邪魔。
295:sage
08/01/09 14:47:15
IDが無いと誰が誰かワカラン
296:デフォルトの名無しさん
08/01/09 18:11:06
質問です。
Dim c1 as Collection
Dim c2 as Collection
Set c1 = New Collection
c1.Add "a"
c1.Add "b"
Set c2 = c1
この次に、
c1.Remove(1) 'c1の最初のアイテムを削除
とやるとc2のアイテムも"b"だけになりますよね。
これはたぶんc2が、c1と同じCollectionオブジェクトを
指しているためなんだな、と理解しています。
理解できないのは、c1.Remove(1)ではなく、
Set c1 = Nothing
とした場合です。
c2もNothingになるのかと思いこんでいましたが、
実際c2には、"a"も"b"も、ちゃんと残っていました。
これはなぜでしょうか?
297:デフォルトの名無しさん
08/01/09 18:25:52
a=1
b=a
a=0
にしてもb=0にならないのと同じ
298:デフォルトの名無しさん
08/01/09 18:27:51
「変数そのもの」と「変数が指す先」の区別を理解しませう。
set c1=nothingは、変数そのものへの操作で、変数が指す先にたいしては、
ほとんど影響しない。(唯一、リファレンスカウントにだけ影響するんだっけか。)
299:デフォルトの名無しさん
08/01/09 18:29:59
それはNothingキーワードが実体を解放するものではないため
300:デフォルトの名無しさん
08/01/09 19:41:42
数値の代入式の場合は、値そのものをコピーする。
オブジェクトの代入式の場合は、値を保存してある場所(参照)をコピーする。
なので、c1の要素を消すと、c2の要素も消えるが、
Set c1 = Nothing とした場合は、c1と値そのものとの関連が削除されるが、値そのものは残ってる。
全ての参照が削除された時点で、値そのものも削除される状態になる。
301:296
08/01/09 20:12:40
>>298
>>299
>>300
レスありがとうございました。
よくわかった、つもりです。
次のような理解でよろしいでしょうか...
Set c1 = Nothing によって、変数c1に格納された参照は削除される。
しかし参照先の実体を、まだ変数c2が参照している。
そのため、実体はメモリ上に存続する。
このあとで更に、Set c2 = Nothing とすると、
実体を指す参照がすべて無くなる。
すると、その実体が自動的に解放される。
302:デフォルトの名無しさん
08/01/09 21:28:25
質問なんですが、
セルの値(自動で変化する)が変わった瞬間に所定のコードを実行する(JavaScriptでいうところのonchange見たいな)、
と言うのは如何すればいいんでしょうか?
303:デフォルトの名無しさん
08/01/09 21:40:07
changeイベントを使えばいいよ
304:デフォルトの名無しさん
08/01/09 22:57:14
>>303
㌧クスです
なるほど、ワークシート単位ではチェンジイベントがあるんですね。
早速やってみます。
305:デフォルトの名無しさん
08/01/10 13:29:04
1から10000までの数字を全部掛けたときに
末尾に並ぶ0の個数を求めるのをVBAでおながいします
306:デフォルトの名無しさん
08/01/10 13:47:41
Excelどころか言語すら関係ないアルゴリズムの話か
>>305→>>2★4
307:デフォルトの名無しさん
08/01/10 13:51:31
>>305
というか桁数が膨大になるので計算機を使っても無理かと。
代数的な解法があるんじゃないですか?数学板の質問スレに質問しては?
308:デフォルトの名無しさん
08/01/10 14:02:10
じゃあ100まででもいいです
309:デフォルトの名無しさん
08/01/10 14:07:59
>>307
アルゴリズム次第では桁数は膨大にならないよ
だって総桁数を調べるのではなく、0の数を数えるだけだから
なんにしろスレ違いだけど
310:デフォルトの名無しさん
08/01/10 15:05:43
セルのコピー、ペーストをvbaで行った後に、コピー元のセルを囲っている
網のようなラインが消えないのですが、これをvba内で
解除するにはどうすればいいでしょうか。
311:デフォルトの名無しさん
08/01/10 15:26:51
>>310
Application.CutCopyMode = False
これはちゃんとExcel VBAの質問だな
312:sage
08/01/10 15:31:47
>>311
お、早速
ありがとうございます
313:デフォルトの名無しさん
08/01/10 16:28:25
オートフィルタを使ってデータベースの集計をしているのですが
1列目 2列目 3列目
A B タイトル
という風になっています。1列目と2列目は評価項目でA,B,C,D,E,Fのいずれかが記入されています
現在これをカウントしているVBAが、
3行目をオートフィルタで集計したいタイトルで搾り出す
1行目をAで抽出後、SubtotalでAの数をカウント
2行目をBで抽出後、Subtotalで…
となっています。昔はこれで十分だったのですが、次第にタイトルが増えてきて
全部やるとなると膨大な時間がかかるようになってきてしまいました。
1つのタイトルに付き単純に12回抽出→数えるとやっているので…
いちいちAで抽出→数える、Bで抽出→数える…と繰り返さずに、
タイトルで絞った後にCoutIFのようにAはいくつ、Bはいくつみたいな具合でやる方法はないでしょうか?
CountIFだと非表示のセルのA~Fまで集計してしまって困っています
314:デフォルトの名無しさん
08/01/10 16:39:34
よーわからんけど..
Sub hogera_vs_mogera()
For i = 1 To 8
hoge = Range("A" & i).Value
If hoge = "A" Then hoge_counter = hoge_counter + 1
Next i
MsgBox hoge_counter
End Sub
315:デフォルトの名無しさん
08/01/10 18:11:37
>>313
ピボットテーブルレポート使ってみて。
316:デフォルトの名無しさん
08/01/10 19:41:52
セルに名前が "hoge"
とついてる場合
range("hoge").value = "ほげほげ"
と操作できますが
この名前 "hoge" の行 列の値を得る方法を
教えて下さい hogeが(1,5)なら
int row = 1
int col = 5
のように得たいです。
317:デフォルトの名無しさん
08/01/10 19:56:30
Range("hoge").Row
Range("hoge").Column
318:デフォルトの名無しさん
08/01/10 23:06:12
質問なのですが、
Public Type SyainData
Id As Long
Name As String
End Type
Dim Kyo(5) as SyainData
と宣言しループ処理で関数の引数として2番目のNameを渡したいのですがどうすればいいですか?
319:デフォルトの名無しさん
08/01/10 23:19:01
Kyo(2).Name
320:デフォルトの名無しさん
08/01/10 23:23:03
319さん、ByRefコンパイルエラーと表示されます。
321:デフォルトの名無しさん
08/01/10 23:26:15
319さん
ちなみにAユーザーフォームからNameに入力して
標準モジュールに定義してある構造体にそれぞれ格納した値をBユーザーフォームに出力したいのです。
322:デフォルトの名無しさん
08/01/11 00:19:38
関数の呼び出し方と、関数の定義くらい書いたら? (先頭の、Sub/Function~の行)
判断する情報が少なすぎる。
323:316
08/01/11 09:24:37
>>317
ありがとうございました(^▽^)
324:デフォルトの名無しさん
08/01/11 10:14:12
VBAで実行中に「vbcritical」と共に、「400」って
数字が表示されるエラーはなんですか?
325:デフォルトの名無しさん
08/01/11 14:21:13
msgboxやinputboxの外観をもっと可愛くしたい!
326:デフォルトの名無しさん
08/01/11 14:33:31
スマン連投・・・
>>325はどうでもいいです
VBAを含むxlsを「共有」した途端に、そのvbaの挙動が微妙に変わってしまいました。
vbaの内容は、セル範囲をrangeで指定して、最下行にペーストするだけなんですが・・・。
なんか、ちょっとずれる感じなんです。ウィンドウの固定が原因かも。
共有と同時にVBAがロックされるので、原因の確かめようが無い状態(T-T
327:デフォルトの名無しさん
08/01/11 15:27:54
質問の仕方すら何かズレてるみたいだし、しょうがないね。 そういう星の下に生まれたんだよ。
328:326
08/01/11 16:19:52
共有の関係で、ペースト先の結合がバラバラになった模様・・・orz
こればっかりはどうしようもないですかね
保護されたセルに書き込むというのはvbaで何とかなりましたが・・・
329:デフォルトの名無しさん
08/01/11 16:48:30
>>325
つAssistant
330:デフォルトの名無しさん
08/01/11 18:07:53
>>329
なるほど、カイル君が使えるんですね・・・
ありがとうございます
331:デフォルトの名無しさん
08/01/11 19:37:54
>>328
このスレはオマイの進捗報告書かと
332:デフォルトの名無しさん
08/01/12 13:39:08
winxpでExcel2003を使用しています。
VBA-Editorからの実行は正常で、ワークシート上のコマンドボタンからの実行だと
時々、Excelが強制終了します。
コードは変えていないのに、上記の状況が発生しないときもあります。
バグだと思うのですが、発生しない時もあるので、原因がつかめません。
そんな事ってありますか?
333:デフォルトの名無しさん
08/01/12 13:49:06
>>332
あるよ。何か、以前にも出てたと思う。
クラスをインプリメントして、何かややこしいことしようとしてるヒトが居て、
エラーが出たり出なかったりするという話があった。基本的にはそれと同じ系統の問題では?
334:デフォルトの名無しさん
08/01/13 01:40:25
winxpでExcel2003を使用しています。
以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。
1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。
Sub まとめ()
Dim i As Integer 'カウンタ変数iの宣言
Dim n As Integer
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言
Dim MyC As Worksheet
Worksheets.Add before:=Worksheets("全国")
ActiveSheet.Name = "data"
Set MyS1= Worksheets("data")
With Worksheets("全国")
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value
End With
i=12
For Each MyC In Worksheets
If MyC.Name<> "data" Then
n = 12
MyS1.Cells(i,1)=MyC.Name
i=i+1
Do While MyC.Cells(n,2).Value<>""
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value
i=i+1
n=n+1
Loop
End If
335:デフォルトの名無しさん
08/01/13 01:45:30
Sub まとめ()←死ね
Dim i As Integer 'カウンタ変数iの宣言←死ね
Dim n As Integer ←死ね
Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言←死ね
Dim MyC As Worksheet←死ね
←死ね
Worksheets.Add before:=Worksheets("全国")←死ね
ActiveSheet.Name = "data"←死ね
Set MyS1= Worksheets("data")←死ね
With Worksheets("全国")←死ね
MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value←死ね
End With←死ね
←死ね
i=12←死ね
For Each MyC In Worksheets←死ね
If MyC.Name<> "data" Then←死ね
n = 12←死ね
MyS1.Cells(i,1)=MyC.Name←死ね
i=i+1←死ね
Do While MyC.Cells(n,2).Value<>""←死ね
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value←死ね
i=i+1←死ね
n=n+1←死ね
Loop←死ね
End If←死ね
336:デフォルトの名無しさん
08/01/13 04:26:19
こんなひどい丸投げを久しぶりに見た・・・
337:デフォルトの名無しさん
08/01/13 05:08:47
replace "\n" "←死ね\n"
338:デフォルトの名無しさん
08/01/13 05:10:22
>>334
随分酷いコードだな
VBA始めて3日くらいの奴が書いたコードだろ
こんな下劣なコードの説明なんてまっぴらだぜ
339:デフォルトの名無しさん
08/01/13 14:25:58
ある意味、微笑ましいコードだなw VBならでは、とでも言うか。
340:334
08/01/13 14:39:48
わからないのなら、レスくださらなくて結構です。
わかる方のみでお願いします。
341:デフォルトの名無しさん
08/01/13 14:58:48
>>340
どうもすみません・・。
342:デフォルトの名無しさん
08/01/13 15:17:23
要はググれということだ
343:デフォルトの名無しさん
08/01/13 15:18:17
>>340
判るんだけどさぁ、それを説明するのはスレ違いだし、そもそも野暮だろ?
344:デフォルトの名無しさん
08/01/13 15:56:32
>>340は馬鹿女
345:デフォルトの名無しさん
08/01/13 16:01:13
馬鹿かどうかは重要じゃない
大事なのは写真だ
346:デフォルトの名無しさん
08/01/13 16:06:19
>>340
1行ずつ説明が必要とかいう時点でおかしいと思わないか?
Dim i As Integerにも説明が必要なのか?どのレベルでだ?
Dimが何を意味して、Integerが何を意味するかまで解説するのか?
あるいは内部でIntegerがどのように管理されているかまで必要か?
処理ってのはある程度の塊で説明するのが普通だろ?
「ここはクラスの平均点を計算する」みたいな感じでよ。
文法がわからないのであれば入門書買うなりググるなりすればいい。
ピンポイントなら教えてやれても全部教えろとか金取りたくなるわ。
347:デフォルトの名無しさん
08/01/13 16:07:50
写真なんかはどうでもいい。
動画だ。動画をよこせ。
348:デフォルトの名無しさん
08/01/13 16:11:57
クリーチャーが「あたしはできる女なのよ!」とか自己紹介してる動画とかか?
349:デフォルトの名無しさん
08/01/13 21:03:19
質問ですが、組み込みダイアログボックス(例えばApplication.Dialogs(xlDialogPrint).Show)の
ウィンドウハンドルを取得するには、どうすればよろしいでしょうか?
APIを使って行うと思いますが、Excel本体やユーザーフォームのウィンドウハンドルの取得であれば
ググれば出てきたのですが、組み込みダイアログボックスのウィンドウハンドルの取得は
見つけることができなかったので、よろしくお願いします。
350:デフォルトの名無しさん
08/01/13 21:15:02
Spy.exe
351:デフォルトの名無しさん
08/01/14 06:14:32
>>334
i=12
iに12を設定する
For Each MyC In Worksheets
MyCごとの処理です
If MyC.Name<> "data" Then
n = 12
MyC.Nameがdataと違うときは、nに12を設定する
MyS1.Cells(i,1)=MyC.Name
i=i+1
MyC.NameをMyS1 の(12,1)に設定して、iを13にする
Do While MyC.Cells(n,2).Value<>""
MyCの(12,2)が空じゃなければ、以下の処理を繰り返す
MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value
MyS1の(13,1)から(13,12)に、 MyCの(12,1)から(12,12)を設定する
i=i+1
n=n+1
Loop
iを14に、nを13にして Do Whileに戻り、
MyCの(13,2)が空じゃなければ、また処理を繰り返す
MyS1の(14,1)から(14,12)に、 MyCの(13,1)から(13,12)を設定する
その次はMyS1の(15,1)から(15,12)に、 MyCの(14,1)から(14,12)を設定する
というふうに、iとnは1ずつ大きくなり、MyCの(n,2)が空になると処理をやめる
End If
352:デフォルトの名無しさん
08/01/14 07:47:13
URLリンク(zoomtv.web.fc2.com)
353:デフォルトの名無しさん
08/01/14 08:10:03
>>351
やさしいにもほどがあるな
354:デフォルトの名無しさん
08/01/14 09:41:33
教えたがりは一種の荒らし
355:デフォルトの名無しさん
08/01/14 10:18:46
中途半端なヤツほど、簡単な質問に答えたがる。
結局、自分自身の頭の整理をしてるんだろうな。
356:デフォルトの名無しさん
08/01/14 10:53:34
>>353-355
君たち気持ち悪いよ。
357:デフォルトの名無しさん
08/01/14 11:21:53
このスレ気持ち悪いよ
358:デフォルトの名無しさん
08/01/14 11:31:16
このスレ気持ち悪いよ
359:デフォルトの名無しさん
08/01/14 11:48:28
このスレ気持ち悪いよ
360:デフォルトの名無しさん
08/01/14 13:42:05
おいおいどう見ても皮肉のレスだろ
求めてる答えがあれなら質問の意味がないと思うぞ
361:デフォルトの名無しさん
08/01/14 14:04:34
だれも回答しないから自分で書いたんだろうな
362:デフォルトの名無しさん
08/01/14 18:30:10
質問スレって所で答えては駄目だと。じゃぁ、このスレの存在意義って何さ。
363:デフォルトの名無しさん
08/01/14 18:50:09
教えたがり撲滅
364:デフォルトの名無しさん
08/01/14 18:58:48
>>362
ごきぶりほいほい
365:デフォルトの名無しさん
08/01/14 20:43:59
要は面倒なことはやりたくないだけだろw
366:デフォルトの名無しさん
08/01/14 22:43:08
>>362
> 質問スレって所で
そう、ここは質問スレであって、
自社商品を購入してくれた顧客相手のサポートセンターでも
受講料を支払ってくれた生徒相手のスクールでも無い
367:デフォルトの名無しさん
08/01/14 23:14:23
要は面倒なことはやりたくないだけだろ
368:デフォルトの名無しさん
08/01/14 23:15:24
ここは無知な人間をののしるためのスレに決まってんじゃん
369:デフォルトの名無しさん
08/01/14 23:21:18
昔はそれなりにレスが付いていたが、今となっては・・・ね
370:デフォルトの名無しさん
08/01/15 00:05:33
Excel VBA回答スレが必要だな
371:デフォルトの名無しさん
08/01/15 00:41:49
質問です。
OS: xp pro
EXCELバージョン :2003
RGB値を使いセルの塗りつぶしを行いたいと思い、
Cells(1, 1).Interior.Color = RGB(227, 229, 223)と記述しました。
しかし実際セルの色を見てみるとまったく違う色が塗られていました。
色を解析するソフトでその色のRGB値を調べてみるとRGB(204,255,204)でした。
もうわけわかりません、アドバイスお願いします。
372:デフォルトの名無しさん
08/01/15 00:51:12
>>371
RGB(255, 0, 0)なら赤になるか?
なるならcells( i, j )にRGB( i, j, 0 )を入れたときに正しいグラデーションになるか?
RGB解析ソフトでRGB(255, 0, 0)等が正しく読み取れるか?
これくらい試してみてくれないか?
373:デフォルトの名無しさん
08/01/15 01:21:22
>>372
ありがとうございます、試してみました。
RGB(255, 0, 0)なら赤になるか?→ なりました。
cells( i, j )にRGB( i, j, 0 )を入れたときに正しいグラデーションになるか?
→
For w_row = 1 To 256
For w_gyo = 1 To 256
ThisWorkbook.Sheets(3).Cells(w_row, w_gyo).Interior.Color = RGB(w_row, w_gyo, 0)
Next
Next
を試したところ正しいグラデーションにはなりませんでした。
参考画像です。URLリンク(nagamochi.info)
ツール→オプション→色で表示したい色を追加すると表示できました。
これ以外には方法はないのでしょうか?
374:デフォルトの名無しさん
08/01/15 01:25:01
>>371
エクセルは全てパレット管理。
パレットの色しか表せない。パレット以外の色をVBA等で選んでも近いパレットの色を使用させられる。
↓
すなわちパレットを変更すればいい
>ツール→オプション→色で表示したい色を追加すると表示できました。
>これ以外には方法はないのでしょうか?
その表示できた方法をマクロの記録で記録してやればいい。
375:デフォルトの名無しさん
08/01/15 01:46:21
>>374
解決できました、ありがとうございました。
376:デフォルトの名無しさん
08/01/15 11:36:29
>>351
ありがとうございました!
377:334
08/01/15 11:42:32
>>351
そんなことを聞いているわけじゃありません、冗談は勘弁してください。
378:デフォルトの名無しさん
08/01/15 14:45:05
もっと言ったれw
379:デフォルトの名無しさん
08/01/15 18:52:50
>>334=377
ぷっっ て、ところだけど、何をききたいのか、言ってみたら。
折れが笑ってあげるからw
380:379
08/01/15 20:05:12
解決しました
381:デフォルトの名無しさん
08/01/15 20:49:36
>>380
おまい、アンカーもようつけんで、・・・www
382:379
08/01/15 20:52:47
>>380
は偽者です。
383:379
08/01/15 21:08:38
>>382
お前も偽物だろうがw
384:379
08/01/15 21:32:44
俺は偽物ですよ
でも>>380は本物ですよ
385:デフォルトの名無しさん
08/01/16 01:17:42
>>379
>>>334=377
いいえ、等しくありません。
386:デフォルトの名無しさん
08/01/16 10:06:13
>>373
どうでもいいが、RGB()関数って256を指定してもエラーにならないのか、知らなかった。
387:デフォルトの名無しさん
08/01/16 13:00:24
項目とデータを含んだ2次元配列変数A,B たとえばA(30×2),B(100×2)があり、
Bの100個の項目のなかからAの項目30に該当するものをそのままAのデータに代入したい
ということを考えています。ワークシート上で行う場合はlookup関数を使えばよいのですが
マクロのままで高速に行う方法はないものでしょうか?
ワークシート関数を使ったとしても一度ワークシートにデータを書き出さなければ
つかえないのでしょうか?色々調べても分からなかったので
どなたか御教示頂けると嬉しいです。
388:デフォルトの名無しさん
08/01/16 13:26:11
>>387
ん? というか、既に処理を書いてるんだったら、
VBAで処理してからワークシートに吐いた方が、そりゃ若干早いはずだと思うが。
389:デフォルトの名無しさん
08/01/16 13:46:00
あ、すみません。Bの項目、データは揃っていますが、Aは項目だけで
B100個の項目の一部でAの30個の項目と重複しているものを検索、抽出して
Aの該当する項目のデータとして代入しようとしています。
ワークシートの上でやるのなら、lookup関数をつかえば良いのでしょうが
ワークシートを一切いじらずに配列の内部処理だけで同様な操作を高速に
できないかと悩んでいる次第です。
390:デフォルトの名無しさん
08/01/16 14:21:54
>>389
Dim i, j As Integer
Dim AKey(30), AValue(30), BKey(100), BValue(100)
For i = 0 To 29
For j = 0 To 99
if AKey(i) = BKey(j) Then AValue(i) = BValue(j)
Next j
Next i
こういう事かな?
この程度の個数ならワークシートでやってもほぼ一瞬だと思うけど。
391:デフォルトの名無しさん
08/01/16 17:41:03
質問。
セル[A2:C2]に英語・数学・国語の得点が入っている。合計点を計算し、
セル[D2]に入れるマクロを作成しなさい。
また、合計点が270点以上の時には「大変よくできました」、
180~269点のときには「よくできました」、
180点未満のときには「がんばろう」というメッセージをセル[E2]に表示しなさい。
英語の得点は90点
数学の得点は85点
国語の得点は100点 とする。
よろちくね。
392:デフォルトの名無しさん
08/01/16 18:03:29
>>391
それは質問とは言わないような・・・。
Sub Macro()
Range("D2") = Range("A2") + Range("B2") + Range("C2")
Select Case Range("D2")
Case Is >= 270
Range("E2") = "大変よくできました"
Case Is >= 180
Range("E2") = "よくできました"
Case Else
Range("E2") = "がんばろう"
End Select
End Sub
393:デフォルトの名無しさん
08/01/16 19:17:08
デフォルトプロパティの省略はやめましょう
少なくとも他人にコードを渡すときは
394:デフォルトの名無しさん
08/01/16 21:49:52
2007で作ったマクロは何であんなに重くなるんだ。
一旦5.0で保存したら軽くなったんだけどまともに動かなくなるし。
これから2007が標準になっていくのかと思うと憂鬱だ。
395:デフォルトの名無しさん
08/01/16 21:59:19
うちの会社、未だに2000使ってて、GJ!!!
自宅の自前PCも、2000のまま。サポートし続けろよ>MS
396:デフォルトの名無しさん
08/01/16 22:02:13
Office 2000
メインストリーム サポート : 2004 年 6 月 30 日終了
延長サポート 期間 : 2004 年 7 月 1 日から 2009 年 7 月 14 日まで
(修正プログラム サポートには最新のサービス パックがインストールされている必要があります)
397:デフォルトの名無しさん
08/01/17 10:00:49
>>390 ありがとうございます。
やりたいことはそういうことなのですが、
その書き方だと要素が膨大になった時は明らかに遅くなると思います。
VBA上で高速に行う書き方などご存知ありませんでしょうか?
398:デフォルトの名無しさん
08/01/17 10:22:24
>>397
アルゴリズム的な話なら、手法はいろいろあるが、「VBA上で高速に行う書き方」ではなく
「VB言語で高速に行う書き方」になるので、例えExcelでやるとしてもスレ違いだよ >>2★3★4
399:デフォルトの名無しさん
08/01/17 11:14:43
>>397
参照される側(ここではB)をCollectionにすればO(n)なるよ。
Dim i As Integer
Dim AKey(30), AValue(30)
Dim B As New Collection
For i = 0 To 29
AValue(i) = B.Item(AKey(i))
Next i
400:デフォルトの名無しさん
08/01/17 11:51:13
各都道府県に分けられているデータをdataという名前のシートに集計するプログラムを作成したいです。
簡単に言いますと1つのシートに47個のシートを入れたいです。
よろしくお願いします
401:デフォルトの名無しさん
08/01/17 12:51:36
>>392 さん
ありがとうございます。
402:デフォルトの名無しさん
08/01/17 20:37:20
>>400
>1つのシートに47個のシートを入れたいです。
意味不明
1つのブックに47個の県別シートを作りたいという意味なのか?
逆に県別に47個あるシートから1つのdataって言う名前のシートに集計したいってことなのか?
どのセルに何をどういう条件で集計するのかも書いていない。
403:デフォルトの名無しさん
08/01/17 22:54:26
質問です、VBA構造体配列を初期化したいのですがどうすればいいですか?
調べたのですがよくわかりませんでした。
404:デフォルトの名無しさん
08/01/17 23:16:07
初期化用の構造体を作って代入
405:デフォルトの名無しさん
08/01/18 00:46:52
初期化用関数作る
406:デフォルトの名無しさん
08/01/18 01:31:22
403です。
404.405さん以外のやり方を探しているのですがEarseの使い方やZreoMemoryの使い方がわからないです
407:デフォルトの名無しさん
08/01/18 02:43:12
>Earseの使い方やZreoMemoryの使い方がわからないです
そりゃそうでしょう、そんなものありませんから。
408:デフォルトの名無しさん
08/01/18 08:27:07
>>403
その辺の仕様はVB6と一緒です
つまり>>2★3★4
409:デフォルトの名無しさん
08/01/18 11:59:04
VBAを実行する前に、このブックが共有されているかどうか
調べて、結果を返す方法は無いでしょうか。
410:デフォルトの名無しさん
08/01/18 12:20:06
>>409
Workbook.MultiUserEditing で調べられるけど、これはVBAだからダメってこと?
411:デフォルトの名無しさん
08/01/18 12:25:45
VBA実行してからまたきてね♪
412:デフォルトの名無しさん
08/01/18 12:31:44
ありがとうございます!
いえ、multiuserediting の存在を知りませんでした・・
413:397
08/01/18 14:55:18
>>398,>>399さん、判りました。自分でもまた試してみます。
ありがとうございました。
414:デフォルトの名無しさん
08/01/18 18:11:23
使えねーな
415:デフォルトの名無しさん
08/01/18 19:41:23
Worksheet_Changeで対応できない書式の変更にリアルタイム反応するためユーザーが入力した書式などをリアルタイム監視するプログラムを作成したところ、終了条件の問題に突き当たり処理に悩んでます。
'-----------------------------
Private EndFlg As Boolean
Sub Worksheets_Activate
EndFlg = False
Call 監視処理
End Sub
Sub Worksheets_Deactivate
EndFlg = True
End Sub
Sub 監視処理
Do
(処理)
DoEvents
Loop Until EndFlg = True
End Sub
'------------------------------
このようなものが、ほとんどのワークシートに書いてある状態です。
Loop Until EndFlg = True の直後にメッセージボックスを設け確認したところ、Worksheet_Activateのあるシートに移動するとその場では終了せず、Activateのないシートに移動した瞬間に終了します。
たとえばActivateのあるシートA、BとActivateのないシートCがある場合
A→C、B→Cは正常な終了が確認できるのですが
A→B、B→Aは終了メッセージが出ません。
A→B→A…を延々繰り返したあとにCを選択すると、終了メッセージがA⇔Bした回数に比例して複数出るため多重起動であると断定できました。
Activateのないシートをはさまずに開放する方法ありませんでしょうか。
416:デフォルトの名無しさん
08/01/18 20:16:17
TextBox1の入力に応じてlistboxの内容を決め、
クリックされた項目とTextBox1の入力を考慮して
TextBox2の内容を決めるということをやろうとしています。
後述のように書こうとしました。
Private Sub TextBox1_Change()
'入力に応じてワークシートからhaniにアドレスを取り出す
以下略
With UserForm1.ListBox1
.ColumnCount = 1
.RowSource = hani.Address
End With
End Sub
Private Sub ListBox1_Click()
'先ほどの入力とリストの結果からテキスト2の内容を決める。
UserForm1.TextBox2.Value = 以下略
End Sub
このようにするとPrivate Sub TextBox1から
Private Sub ListBox1_Click()に受け渡されるのは
haniの内容だけで、それ以外の変数を渡そうとしても
上手くいかず困っています。callの構文を使えば良いのでしょうか?
色々調べてみても判らずどなたかアドヴァイス頂けると嬉しいです。
417:デフォルトの名無しさん
08/01/18 22:25:58
初歩的ですみません。
VBAで、あるセル範囲にある数式の答えを出力するにはどうすればいいんでしょうか?
Range("A1:A5")="b2/2+b5"みたいにすると数式がそのまま出力されるし・・・
418:デフォルトの名無しさん
08/01/18 22:31:50
>>417
それが初歩的だとわかるぐらいならじゅうぶん中級車さ
419:デフォルトの名無しさん
08/01/18 22:32:42
>>415
ループが入れ子になってると思う。
監視処理を各シートにを書くんじゃなくて、どこか一枚に
Sub 監視処理
Do
if !SheetA.EndFlg(0) = False Then (処理)
if !SheetA.EndFlg(1) = False Then (処理)
・・・
DoEvents
Loop Until 監視終了=True
End Sub
とか何とか書いて、実行しておけばいいんじゃないかな?
>>416
言ってる意味がよく判らないけど、
TextBox1_Change()内で使ってる変数を、ListBox1_Click()内でも使いたい、
と言う事なら、グローバル変数でも使えばいいんじゃないの?
>>417
Range("A1:A5") = "=b2/2+b5"
420:デフォルトの名無しさん
08/01/18 23:11:24
>>415
DoEvents ステートメントは、ウィンドウズメッセージとイベントプロシージャの処理が終わるまで
戻ってこないから、多分、AのDeactivate⇒即座にBのActivateが走ってる状態。
ちょっと構造を見直した方がいいかもね。
421:デフォルトの名無しさん
08/01/19 17:14:35
OS XP、Excel2003
普段は、VBエディタから 挿入 → 標準モジュール で
Module** といったファイルを作成してコードを書いています。
このModule** というファイルを自分の好きな名前にするのにはどうしたら良いのでしょうか?
422:デフォルトの名無しさん
08/01/19 17:25:27
右クリックの名前を変更かF2でできたと思う。