Excel VBA質問スレ Pa ..
[2ch|▼Menu]
2:デフォルトの名無しさん
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
dクス
挑戦してみる^


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

4744日前に更新/253 KB
担当:undef