VBAについて Ver.3.0

このエントリーをはてなブックマークに追加
928デフォルトの名無しさん:04/12/13 21:36:35
>>927
Dim rng As Range
For Each rng In Selection
 rng.Value="Hoge"
Next rng
929927:04/12/13 22:21:04
>>928
解決することができました。
大変助かりました。ありがとうございます。
930925:04/12/13 23:18:45
>>926

ありがとうございました。できました。

実は値を再び別のセルに挿入するプログラムだったのですが、
挿入時にも数値型に変換されてしまいました。
こちらは挿入時に"'"と文字列連結してから代入することによって解決しました。
あわせてご報告します。
931デフォルトの名無しさん:04/12/13 23:28:21
>>930
そういう場合は下のコード使ったほうがいいんじゃないですか?

A1セルの値をA2セルへ入れる場合。

Range("A1").Copy Destination:=Range("A2") 'コピー
Range("A1").Cut Destination:=Range("A2") '移動
932918:04/12/14 13:12:02
Sub Vba()
Set en = Range("C2:C6")
Set hit = Range("B2:B6")
Const z As Double = 3.14159265358
X = 5
For j = 0 To X
hit = 0
For i = 1 To 10 ^ j
If (Sqr((Rnd * 2 - 1) ^ 2 + (Rnd * 2 - 1) ^ 2)) < 1 Then
hit = hit + 1
End If
Next i
en(j) = 10 ^ j
en(j) = hit / 10 ^ j * 4
Next j
End Sub
このプログラムで円周率の値はでるのですが、このプログラムから
ヒット数をRange("B2:B6")につくりたいとおもいます。
どのようなプログラムが必要なのでしょうか?
力をお貸しください。
933デフォルトの名無しさん:04/12/14 16:08:30
cells( j + 1, 2 ) = hit
934918:04/12/14 19:41:49
>>933
あ、ありがとうございます。
あともう一個質問させてください。
各シミュレーションが終了する度に(10回100回と)、
Msgboxを表示してシュミレーションを続けるかどうかを問い合わせる
ためにはどうすればいいでしょうか?
質問ばっかですいません


935デフォルトの名無しさん:04/12/15 00:01:14
936デフォルトの名無しさん:04/12/15 01:39:08
配列の受け渡しなんですが
Dim X(42) As Variant
Range(Sheet1.Cells(EGYO, 12), Sheet4.Cells(EGYO, 43)).Value = X(11 to 43)

43個の配列変数があって
そのうちの11〜42をセルに入れようと思って
X(11 to 42)
と、書いてみたんだけど無理なようです

やっぱり
Do LoopとかFor Nextで
一個一個入れないといけないんでしょうか?
937デフォルトの名無しさん:04/12/15 01:44:42
訂正です
Dim X(42) As Variant
EGYO As Integer

中略

Range(Sheet1.Cells(EGYO, 12), Sheet1.Cells(EGYO, 43)).Value = X(11 to 42)

こんな感じになってます
938デフォルトの名無しさん:04/12/16 00:22:35
エクセルのグラフの散布図等で、あるデータラベルが他のデータラベルと
重なっているかどうかを判定するような関数を書くにはどうやったら良いのでしょうか?
大量に値をプロットしてラベルを付けるとラベル同士重なって読めなくなってしまって…
適当に間引きしたいのです。
ラベルの topとleftと文字数で地道に計算する方法しか思いつかないのですが
なんか良いやり方ないでしょうか?
939デフォルトの名無しさん:04/12/17 13:37:02
A,B二つのブックがあったとして
BのブックからAに作成してあるUserFormを操作する方法ってあるのでしょうか?
あればヒントだけでもよいので教えていただけないでしょうか。
940デフォルトの名無しさん:04/12/17 20:49:42
VBAで変数の型変換(キャスト)ってできますか?
941デフォルトの名無しさん:04/12/17 21:11:40
CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CVar(expression)
CStr(expression)

942デフォルトの名無しさん:04/12/17 21:56:46
ユーザー定義関数の戻り値として配列を返すのはどうやればいいでしょうか?
943デフォルトの名無しさん:04/12/17 22:14:47
普通にできるぞ
944デフォルトの名無しさん:04/12/18 21:13:40
>>939
Bのブックから、Aのブックを参照設定する。
945デフォルトの名無しさん:04/12/18 23:59:09
エクセル97のVBAなんですが、たとえば以下のクラスがあったとして
<<Class Foo>>
Public Field_A as Long
Public Field_B as String
Public Field_C as Date
このインスタンスが詰まったコレクション Foos があったとします。
このコレクションをField_B, Field_C 等の好きなメンバでソートしたいのですが
どうやったらよいのでしょうか?
946デフォルトの名無しさん:04/12/19 00:40:52
なんかググってみたら
こういうのはADOとかにリンクさせて処理するもんなんでしょうか?
(確かにそのほうがラクそうだ)
947デフォルトの名無しさん:04/12/19 06:29:10
エクセル2000を使っています。
表示しているシートを、VBAを使って
画像として保存することできますか?
948デフォルトの名無しさん:04/12/19 08:42:18
>>947
ウインドウハンドルからデバイスコンテキストを取得してそれの中身をビットマップファイルとして保存すればよいですよ。
949947:04/12/19 14:32:11
>948
ありがとうございます。早速やってみます。
950冷や水:04/12/19 15:46:08
'質問 1 Word VBA
Option Base 1
Sub Q1()
Selection.WholeStory
Selection.Delete
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=4, NumColumns:=6
For K = 1 To 4
For J = 1 To 6
Selection.TypeText Text:="(" & K & "," & J & ")"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Next J
Next K

End Sub
'上記によって4行6列のテーブルを Word2000 の Book1 に作表しました。
'この後、テーブルの2行目と3行目の欄は全て高さを30ミリに、また4列目と5列目の欄は全て横幅を15ミリに変更しようと思います。
'End Subの前に何を追加すべきでしょうか。どなたかご教示いただけると有難いです。

951デフォルトの名無しさん:04/12/20 14:17:20
A1とC1のセルを選択していたとして。コードでA1のセルの選択だけを解除したいときはどうやったらいいのでしょうか?
952デフォルトの名無しさん:04/12/20 14:31:22
C1を選択で出来ない?
953デフォルトの名無しさん:04/12/20 17:48:32
>>952
出来ましたがA1,C1,E1と3つあってA1だけ解除したいときE1も選択解除されてしまいます。
こういった場合はどうすればいいのでしょうか?何度もすいません。。
954デフォルトの名無しさん:04/12/20 17:58:54
仕様かわってんじゃん…
955デフォルトの名無しさん:04/12/20 20:55:28
>>953
Range("C1,E1").Select
956デフォルトの名無しさん:04/12/22 16:07:57
教えてください。
Excel2000でクリップボードのクリアをするVBAがわかりません。
マクロの記録をしても記録されないようです。
よろしくお願いします。
957デフォルトの名無しさん:04/12/22 17:18:38
>>956
EmptyClipboard
958デフォルトの名無しさん:04/12/23 09:11:36
>>956
Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long 'クリップボードをオープン
'クリップボードを空にし、クリップボード内のデータのハンドルを解放
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function CloseClipboard Lib "User32" () As Long 'クリップボードをクローズ
'クリップボードクリア関数呼び出し 別にこれを呼び出さなくても直接CLR_ClipBoard "" でかまいません
Sub ClipCLR()
CLR_ClipBoard ""
End Sub

Function CLR_ClipBoard(myString As String)
Dim ret As Long

'クリップボードオープン
If OpenClipboard(0&) = 0 Then
GoTo ERR1
End If
'クリップボードクリア
ret = EmptyClipboard()
'クリップボードクローズ
If CloseClipboard() = 0 Then
GoTo ERR2
End If
Exit Function
ERR1:
  MsgBox "クリップボードが開けません(エラー)"
  Exit Function
ERR2:
  MsgBox "クリップボードが閉じれません(エラー)"
  Exit Function
End Function
959デフォルトの名無しさん:04/12/23 17:54:24
>>956
ひょっとして、VBAでブックを閉じる時に「クリップボードに大きな情報があります」
ってエラーを出さないようにしたいからですか?
960デフォルトの名無しさん:04/12/25 14:15:28
変数にセルの情報として条件付書式設定で設定した色を
入れることはできないんですか?
「.Text」だと書式のみになってしまいます。
961デフォルトの名無しさん:04/12/26 08:37:23
>>960
このあたりの事?
.Interior.ColorIndex = 6
.Interior.Pattern = xlSolid
962960:04/12/26 14:05:11
>>961
それは色をあらかじめ指定しておかないといけない、ということですか?

963デフォルトの名無しさん:04/12/26 14:07:19
>>962
明らかに違います。
964デフォルトの名無しさん:04/12/27 04:02:31
If Selection = SpecialCells(xlCellTypeBlanks)
といった、もしアクティブセルが空白だったら Exit Sub する
といったのを書きたいのですがどうしてもわからないので教えてくれませんか。
965vba3週間目:04/12/27 07:30:10
まだまだ初心者ですが
If Cells(*,*)<>""Then
じゃだめかな?
966デフォルトの名無しさん:04/12/27 19:08:38
vba3週間目さん、解答してもらいありがとうございます。
Cells(*,*)といった形ではなく、SelectionかActiveCellを使いたかったんですが
一応、
If Selection.Value = " " Then でできました。
967デフォルトの名無しさん:04/12/27 21:55:02
If ActiveCell.Value = "" Then でもいけるし。
968デフォルトの名無しさん:04/12/27 22:26:06
>>960
アクティブセルが対象だとして、条件書式の1番の色を拾うには
myColorIndex = ActiveCell.FormatConditions(1).Interior.ColorIndex
969デフォルトの名無しさん:04/12/28 10:25:59
VBエディタで、nameNumberという変数を作ったとします。
naまで入力したら、何かキーを押すと補完してくれる、
という機能があったら教えて下さい。
970デフォルトの名無しさん:04/12/28 12:11:00
A列の1行目から10行目の中で太字になっている数字を合計しA11に表示したい
のですが、「太字のみ」という処理がうまく出来ません。
教えていただけないでしょうか?
971デフォルトの名無しさん:04/12/28 13:29:00
>>970

Public Sub test()
Dim intSUM As Integer
Dim I As Integer
    intSUM = 0
    For I = 1 To 10
        If Range("A" & I).Font.Bold = True Then
        intSUM = intSUM + Int(Range("A" & I).Text)
        End If
    Next I
    Range("A11") = intSUM
End Sub
972970:04/12/28 14:48:03
>>971
ありがとうございます。できました。
973デフォルトの名無しさん:04/12/30 17:27:22
すみません、馬鹿な質問かもしれません・・・が、教えてください。
JISコードをSJISに変換する関数とかってありますでしょうか?
974デフォルトの名無しさん:04/12/31 16:50:43
>>969
Ctrl + Space
975デフォルトの名無しさん:05/01/01 14:14:05
           ∧_∧   ┌────────────
       ◯( ´∀` )◯ < あけおめ!
        \    /  └────────────
       _/ __ \_
      (_/   \_)
           lll
976デフォルトの名無しさん:05/01/03 00:35:05
VBAのuserform上に線とか四角形など
描くことってできるのでしょうか?
977デフォルトの名無しさん
書ける