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


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

Excel VBA質問スレ Part4



1 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 09:03:22 ]

ExcelのVBAに関する質問スレです

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

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


2 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 09:03:33 ]

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

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

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

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

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


3 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 09:03:38 ]

・過去スレ

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


4 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 07:04:47 ]


5 名前:デフォルトの名無しさん [2007/09/18(火) 22:54:04 ]
−−−−−−−−−−
|1000|1100|以上|
−−−−−−−−−−
|   | 900|以下|
−−−−−−−−−−

こんな感じのデータが縦横に沢山入っているワークシートなんですが
1000の数値を監視し、1100以上や900以下になったら
1000のセルの色(既に1000ではなくなっているけど)を変えるというものを
VBAで作ろうとしています。

1000の部分は自動で数値が刻々と変わり
1100、900、以上、以下のセルに関しては事前に手入力します。

WorkSheetのChangeイベントでワークシートの全セルの変化を全て監視し
変化のあったセルが1000の位置だったら(2つ右のセルの内容が「以上」かどうかで判定するつもりです)
1000の右の1100や右下の900と比較して
以上なら1000の文字列を青、以下なら赤といった感じで
セルの色を青や赤に変えたいんですが
VBA初心者なんでセルの色を変えるのはともかく
右隣や2つ右、右下といった位置のセルの内容を取得するには
どんなソースを書けばいいのか検討もつきません_| ̄|○

環境はWin2000+EXCEL2000です

6 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:06:44 ]
cells.offset

7 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:07:26 ]
VBAが必要かどうかから考えろ
シートの関数も知らないで聞いてる訳じゃないだろ?



8 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:15:55 ]
>>5 条件付き書式でダメなのか?

9 名前:5 mailto:sage [2007/09/18(火) 23:15:56 ]
>>6.
offsetが目的に使えそうです。
有難うございます。

>>7
すんません、関数もVBAもほとんど知りません。
大昔にC言語でゴリゴリソース書いていたことはあるのですが・・・・


10 名前:5 mailto:sage [2007/09/18(火) 23:19:41 ]
>>8
とりあえず条件付き書式で作ってみたんですが
空白の部分にも1000を入れる必要があるのと
条件を満たした時に音を鳴らしたいのでVBA化するつもりです。
(音の鳴らし方は調べて分かりました)




11 名前:デフォルトの名無しさん [2007/09/19(水) 21:40:05 ]
現在、あるフォルダ内のcsvを読み込んで進捗表に反映させるマクロを使っているんですが、
その後にフォルダとその下層のファイルをクリップボードに張り付ける事は可能ですか?
可能であればヒントだけでも頂ければ・・・

12 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:50:24 ]
>>11
可能だけど>>2★3★4

13 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:53:18 ]
クリップボードとか不安定な領域じゃなく、FSO使ってフォルダオブジェクトとして保持すればいいような

14 名前:デフォルトの名無しさん [2007/09/20(木) 20:12:47 ]
INDIRECT関数をVBA上で作りたいと思っています。
たとえば、sheet2にある(B,C)のセルにあるものを参照しようとして、

Function INDIRECT2(B, C)
Dim SHEETNAME As Worksheet
Set SHEETNAME = Worksheets("sheet2")
INDIRECT2 = SHEETNAME.Cells(B, C)
End Function

で動かすと、値が帰ってきます。
ここで、"sheet2"を変数としてに扱おうと考えて、

Function INDIRECT2(B, C)
Dim SHEETNAME As Worksheet
MOJI = "Sheet2"
Set SHEETNAME = Worksheets(MOJI)
INDIRECT2 = SHEETNAME.Cells(B, C)
End Function

と書くと#value!になってしまいます。
worksheet名を変数で指定することはできないのでしょうか?



15 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:25:27 ]
ツッコミどころが多すぎてどこから突っ込んで良いものやら・・・

とりあえず
INDIRECT2 = SHEETNAME.Cells(B, C)

INDIRECT2 = SHEETNAME.Cells(B, C).Value

こうしろ



16 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:33:44 ]
上のコードで動くのか。。。

17 名前:前スレ984 mailto:sage [2007/09/20(木) 22:46:42 ]
Dim fName , tmp

fName = Combobox1.Value

 With CreateObject("Scripting.FileSystemObject")
  If LCase(.GetExtensionName(fName)) = "txt" & vbCrLf Then
   tmp = Split(fName, ".txt" & vbCrLf)

    For Each fName In tmp
     Msgbox fName
    Next fName
  End If

 End With

End Sub

こんな感じで、コンボボックス内のテキストファイル名を取り出す処理はできたのですが、
最後に一回空白が返ってきてしまいます。
どのようにすれば改善できるでしょうか?

18 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 23:39:49 ]
あのねぇ・・・Valueにリストを入れるなよ・・・

19 名前:14 mailto:sage [2007/09/21(金) 14:05:42 ]
ありがとうございました。

Function INDIRECT2(B, C)
Dim SHEETNAME As Worksheet
MOJI = "Sheet2"
Set SHEETNAME = Worksheets(MOJI)
INDIRECT2 = SHEETNAME.Cells(B, C).value
End Function

にすることによって、同一ブックの中でのセルの参照ができるようになりました。
ここで、
MOJI="[002.xls]sheet2"のように、ほかのブックの値を参照させることはできないのでしょうか?


20 名前:デフォルトの名無しさん [2007/09/21(金) 20:32:14 ]
application.workbooks(BookName).worksheets(SheetName)



21 名前:デフォルトの名無しさん [2007/09/22(土) 09:53:52 ]
VBA歴3ヶ月の初心者なんですが質問させて下さい。

WindowsXPでエクセル2003を使用しています。

下記のように

a
--
b
--
c
--
d

と縦に並んでいる文字列をコピーして
行と列を入れ替えて、それぞの文字を2つずつに
増やして貼り付けしたいのですが、これは可能でしょうか?

a│a│b│b│c│c│d│d│

いろいろ考えたのですが上手い方法が思いつきません。
もし可能でしたらヒントを頂けないでしょうか?

よろしくお願い致します。


22 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 12:00:22 ]
可能
range
For each

23 名前:21 mailto:sage [2007/09/22(土) 14:23:27 ]
22さんありがとうございます。

22さんのヒントを見てから
1時間ぐらいネットで調べたりして考えたんですが
やっぱり分かりません(T_T)
私の職場は女性ばかりでプログラムに強い人が
いなくて職場では誰にも聞けません。。

もし良かったらもう少しヒントを頂けないでしょうか?
よろしくお願い致します。

24 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:46:28 ]
>>23
説明するの面倒だから、一セルずつコピーしたら?

25 名前:21 mailto:sage [2007/09/22(土) 15:24:48 ]
>>24さん

例ではa〜dまでしか書きませんでしたが、実際は膨大な量なんですよ(^^;)
1セルずつコピーしてたらものすごく時間がかかるんです。
この問題さえクリア出来れば全ての作業を自動化出来るのですが・・・。

お手数おかけして申し訳ありませんでした。
私の今の実力では無理ですが、いつかは自分で出来るように頑張ります!

26 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:36:41 ]
>>25
まさか、描画や再計算を止めてないって落ちはないよね?
あなたの言う膨大がどれほどか判らないけれど、100や200のセルのコピーくらい大して時間掛かりませんが。

27 名前:21 mailto:sage [2007/09/22(土) 16:18:45 ]
>>25さん
プログラム完成してないので再計算を止めてないも何も動かしていません(T_T)
200のセルのコピーぐらい大して時間がかからないとの事ですが、
すべてのセルを2倍にして、縦横入れ替えていたらミスも発生するし
作業時間が勿体ないと感じるのです。
その時間が他の仕事に当てられたらと思い、家で考えていました。

もっと勉強してから出直して来ます。

28 名前:21 mailto:sage [2007/09/22(土) 16:19:33 ]
すいません、↑間違えました
>>26さんでした(^^;)

29 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:27:04 ]
大して時間がかからないとは、手作業でやってもということではなく、
マクロで実行したときの話だと思うが。

30 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:40:46 ]
21はプログラムが完成していないと言っているので手作業の事じゃないの?

完成してりゃあ100や200のコピーぐらいすぐ終わるっしょ。

完成して無い奴に
100や200のセルのコピーくらい大して時間掛かりませんが
とか言っても意味無いっしょw



31 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:55:36 ]
ちょっと待て、もしかしたら>21はマクロ云々の話をしていないのではないか?
# だとしたら鼬害なのだが。

32 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:16:20 ]
ちょっと待て、実は24も分かってないとか。

33 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:23:35 ]
問題を整理すると、>21は手作業では手間が掛かることをマクロでやりたい。
しかし、セルを一つずつコピーするようなマクロも書けないので一から教えろ。
と言う話なのかな?

34 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:18:59 ]
For Eachが理解できないやつにExcel VBAを教えるのも無理な話

素直に手動でコピって、形式を選択して貼り付けで行列変換しとけ

35 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:56:11 ]
ここの住人はやっぱり冷たいな。
分かるんなら正解かいてやれよ。

36 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:02:44 ]
自演乙

37 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:54:31 ]
いや冷たいのは事実

38 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:56:56 ]
能書きはこくけどサンプルコードのひとつもだせない
それがVBAスレクオリティ

39 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 21:02:29 ]
>>2★5なので、丸投げ野郎やコード呉厨に冷たいのは当然

それを叩いてるのは自演か過去に丸投げやクレクレして冷たくあしらわれた事が有る奴等w

40 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 21:24:50 ]
クレクレが必死だな



41 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:36:16 ]
ヒント:dim文が3行set文2行コード3行でできる

42 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:53:27 ]
ハズレ

43 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 02:53:50 ]
>>31の鼬害がよめなかった俺はゆとり。再変換して納得。

>>21
別のシートのA1に
=INDEX(シート名!$A:$A,ROUNDUP(COLUMN()/2,0),1)
といれて横にフィルすれば俺の脳内ではいけるけど
128行を超えるとExcel2003は256列しかないで無理。

なんで、もし129行目からは下の行に表示するならA1に
=INDEX($A:$A,ROUNDUP(COLUMN()/2,0)+(ROW()-1)*128,1)
でフィルすれば良い感じ

このままじゃ板違いなんで、同じことをVBAでやると

Dim Rng, rngValue, col%, r%
Rng = sh.Range(sh.Range("A1"), sh.Range("A65536").End(xlUp))
col = 1: r = 1
For Each rngValue In Rng
Cells(r, col) = rngValue: Cells(r, col + 1) = rngValue
col = col + 2: If col > 256 Then col = 1: r = r + 1
Next
まぁ参考程度に。

てか、ここの住人なら俺なんかより良いコードかけるだろうに
ホントいけずだな




44 名前:デフォルトの名無しさん [2007/09/23(日) 05:39:06 ]
Sub aaa()

a = 0

Do Until a 〉127

a = a + 1
c = a * 2

b = 1

Cells(b,c -1) = Cells(a,b)

Cells(b,c) = Cells(a,b)
End Sub
もういないかな?
これ貼り付けれ


列の端っこまでの制限はあるが

ソースが美しくないとかの批判は受け付けねw

作るより打つほうに時間かかる始末
携帯からだと死ねるw

お前らもうちょい優しく教えてやれやwwwwwwwwwwwww



45 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 05:45:25 ]
美しい美しくない以前に・・・・・

46 名前:デフォルトの名無しさん [2007/09/23(日) 05:51:13 ]
ダメならダメとはっきりいってください

ソースのヒントも書かない糞野郎さん

47 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 06:12:08 ]
結局質問スレとして機能してねぇのなここ
ビジネスsoft板のと統合しちまえよ
こんな糞スレ要らん

48 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 09:07:11 ]
Dim RngA As Range
Dim RngB As Range
Dim i As Long

Set RngA = Range("A1:A5") 'コピー元セル
Set RngB = Range("B1") 'コピー先セルの始点

For i = 1 To RngA.Count
Range(RngB.Offset(0, i * 2 - 2), RngB.Offset(0, i * 2 - 1)) = RngA.Cells(i)
Next

中途半端だけど普通はこんなもんか?
ハードコードにすればRngA,Bのくだりはいらないけど。
ただ、やっぱりコード0行で来るスレではないと思うぞここは。

>>44 はループは閉じるとこから始めような。

49 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:23:57 ]
Excel2000で、officeのクリップボードではなくWindowsのクリップボードに変数の値をコピーする方法を教えてください

50 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:17:15 ]
>>49
DataObject使うかWin32API使え

>>2★5なので、あとは自分で頑張ろう



51 名前:デフォルトの名無しさん [2007/09/23(日) 13:36:33 ]
〉〉48

ああすまん Loop書きわ忘れてたな

一応VBA歴3ヶ月って書いてあったから行列の入れ替えと二列づつて書く方法がたまたま思いつかなかったんじゃないかね?
そのヒントすら教えんで ただ罵倒してるのにイラついたもんで

ヒントくださいっていってるしな



52 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:38:32 ]
そして誤字 脱字orz

53 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 14:18:24 ]
誰か罵倒しているのか?

54 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:14:16 ]
Rangeオブジェクト と For Eachステートメントを書いといたのに、
「ヒントすら教えん」とか言われてモナ
これ以上どうしろっつーんだよw
コード丸々書けと?
Rangeでヘルプ引けば
--------------------------------------------
次の使用例は、シート 1 のセル範囲 A1:D10 に対してループを行います。
セルの値が 0.001 未満の場合は、値をゼロ (0) に置き換えます。

For Each c in Worksheets("Sheet1").Range("A1:D10")
If c.Value < .001 Then
c.Value = 0
End If
Next c
-----------------------------------------
なんて出てきて、よく読んでみれば
「あー範囲をセル単位でループして値をセットすりゃ良いんだな」って
ぐらい、ちょっと脳みそが有ればすぐ分かるだろ

残念ながら最低限の能力ラインってのは存在するんだわ
自分が相手にされなかった経験があるからって、いいかげん怨み節を垂れ流すのは
やめてもらえんもんかね?>>51

55 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:40:34 ]
>>54
考え自体は肯定も否定もしないがそのレスは何なのw
そう思ってたからみんなスルーしてただけだろ。

たまーに質問者放置でコード談義に盛り上がり、たまーに優しい人がいて、
基本は「スレ違い」で終わるだけのスレじゃんw

56 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:36:01 ]
>>55
まぁここはExcel VBA雑談スレだからなぁ

57 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:45:39 ]
> 考え自体は肯定も否定もしないがそのレスは何なのw
> そう思ってたからみんなスルーしてただけだろ。

なるほどな
「みんなもそう思ってる」とかその系統か

クレクレ脳を基準に「ヒントもない」とか強弁しなさんなよ

58 名前:デフォルトの名無しさん [2007/09/24(月) 14:13:20 ]
OS:winxp2
ver:2003

宣言セクションでモジュールレベル変数やパブリック変数を
宣言する際に、初期値を格納したのですが、どう記述すればいいんでしょうか?

59 名前:58 [2007/09/24(月) 14:14:27 ]
× 初期値を格納したのですが、・・・



○ 初期値を格納したいのですが、・・・

60 名前:デフォルトの名無しさん [2007/09/24(月) 14:42:10 ]
無理なバージョンは無理だから
まとめて初期値入れるプロシージャでもつくっとけ



61 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:02:33 ]
残念ながら言語仕様で宣言と初期化は同時にできないんです(><


62 名前:デフォルトの名無しさん [2007/09/24(月) 15:16:18 ]
Workbook_Open() か UserForm_Initialize()

63 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:43:20 ]
[VBA プロジェクト オブジェクト モデルへのアクセスを信頼する]
をVBAから操作するにはどうすればよいのでしょうか?

64 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 16:04:26 ]
>>63
それが出来ちゃったら"脆弱性"と呼ばれるだろうなw

65 名前:デフォルトの名無しさん [2007/09/25(火) 00:31:37 ]
>>21さんのやりたいことってVBA使わなくても実現できますよ。
a
b
c
d
a
b
c
d
というデータを用意して,並べ替えたら
a
a
b
b
c
c
d
d
になるでしょ。
その後コピーしてから「形式を選択して貼り付け」します。
この時「行列を入れ替える」をチェックしてね。
すると
aabbccdd
になるよ。

66 名前:デフォルトの名無しさん [2007/09/25(火) 00:44:51 ]
VBみたいにuserformにメニューバーて追加できますか?
ツールバーなら出来るみたいだけど。
メニューエディタは見当たらないし仕様上無理ですか?

67 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 01:51:34 ]
>>65
ついでに「それをマクロ記録してショートカットキー登録」すれば十分だったりするかなw

68 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 02:09:59 ]
>>66
無理
ただしOCX自作するならその限りではない

69 名前:デフォルトの名無しさん [2007/09/25(火) 03:01:24 ]
>>68
素早い回答ありがとうございます。
OCX?ですか。多分無理そうなのであきらめます…。

70 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 20:49:01 ]
○Sheet1.Activate
Range("A1:C3").Borders.Linestyle = True

○Sheet1.Activate
Range(Cells(1,1),Cells(3,3)).Borders.Linestyle = True

○Sheet1.Range("A1:C3").Borders.Linestyle = True

×Sheet1.Range(Cells(1,1),Cells(3,3)).Borders.Linestyle = True

動いたからいいんだけど、どうして一番下だけ駄目なのか理由がわからなくて。
下が駄目なら3番目も駄目なような気がするんだけど?



71 名前:デフォルトの名無しさん [2007/09/25(火) 20:54:34 ]
3番目はそれで特定できるけど
下はSheet1.Cells(1,1)じゃないとダメってことだろ
Sheet1.Activateすれば下でも通るでしょ

72 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 21:19:07 ]
それじゃ回答になっていない

Sheet1.Range(Cells(hoge))って記法だと
Rangeまでは上位オブジェクトが参照できている
しかし(Cells(hoge))だとCellsの上位オブジェクトが分からない
だからその場合VBA側で「とりあえずアクティブシートを参照」するわけだ
これだと期待する動作かどうか判然としない
Activate,Select系を使わないのが望ましいというのは、こういうことから

つまり面倒でも.Sheet1.Range(Sheet1.Cells(hoge,hoge),Sheet1.Cells(hoge2,hoge2))
って記法にしなくてはならない
ソースが読みづらくなるので、こう言うときは通常はWithステートメントを使う

73 名前:デフォルトの名無しさん [2007/09/25(火) 21:28:21 ]
とりあえずじゃないだろ

74 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 23:25:51 ]
65はアホ?

75 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 23:36:49 ]
>>70
Sheet1.Range(Range("A1").Address, Cells(3, 3).Address).Borders.LineStyle = True
これはOKだったりして

76 名前:デフォルトの名無しさん [2007/09/26(水) 19:42:21 ]
Excelで入力規則でリストを設定するとセルがコンボボックスになります。
これと同じようにセルにボタンのような機能を持たせる事は可能でしょうか?
見た目はボタンでなくてもいいです。
実現したいことはあるセルのボタンをクリックすると隣のセルの入力文字を
取得したいのです。通常のコントロールボックスのボタンだとどのセルにも
置けてしまうので隣のセルの文字列取得はできないと思うのです。
VBで言えばSPREADの一つのセルをボタン型にしたようなものです。
要はクリックされれば隣のセルの文字列を取得しメッセージボックスで表示
させるような処理がしたいのです。


77 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:53:46 ]
SelectionChangeイベントでそれなりには作れる

78 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:02:46 ]
コントロールのボタンでそれなりには作れる(配置されてるセルを取得できるので)

79 名前:デフォルトの名無しさん [2007/09/26(水) 22:00:11 ]
>>78
配置されたセルが取得できるとは知りませんでした。
セル間の微妙な位置にも置けると思うので・・・
配置されたセルの取得方法はどうすればいいのでしょうか?

80 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:01:53 ]
ヘルプ嫁



81 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:14:30 ]
for i=1 to 100
  if cells(i,1).value ="飛ばす" then □
  ○○
next i

□で、今回のループだけ抜けたいときはどうすればいいんでしょう
(ようするに、A列に特定文字が入ってるときは○○を実行させたくない)

nextだとエラー、
end forだとfor〜next自体が終わってしまう

elseで囲めばいいんだけど○○の部分が凄く長くて見通しが悪くなるので
なんかどうにかしたかった。

82 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:17:02 ]
そこでgotoですぜ。旦那w

83 名前:デフォルトの名無しさん [2007/09/26(水) 22:56:57 ]
>>80
すみません。うまく見つける事ができません。

84 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:40:49 ]
>>81
Continueは?

85 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:12:17 ]
if not 〜 end if

86 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:34:22 ]
>>79
CommandButton1だったら

CommandButton1.BottomRightCell.Address

とか

87 名前:デフォルトの名無しさん [2007/09/27(木) 01:19:33 ]
10進小数を2進小数に直すプログラムを作っています
このプログラムを使って0.375を2進数に直したいのですが
0.375はこのプログラムのどこに入れたらよいでしょうか?
プログラム自体間違えてたら
間違えている場所を指摘してくれると幸いです


Sub m進小数()
p = Cells(1, 1)
q = Cells(1, 2)
k = 1
While p > 0
a = Int(p * 2)
q = a * 0.1 ^ k + q
p = p * 2 - Int(p * 2)
k = k + 1
Wend
Cells(2, 1) = 0.1 ^ k + q
End Sub


88 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 07:15:14 ]
Cells(1, 1)

89 名前:デフォルトの名無しさん [2007/09/27(木) 09:27:59 ]
多数のファイルの、それぞれ同一の名前のシート内に、
特定の文字列があるかどうかを検索して、できればそれを削除したいのですが、
どうすれば可能でしょうか?

↓のマクロではシートを指定できず、削除することもできません。

Sub Macro()
With Application.FileSearch

.NewSearch
.LookIn = "C:\Documents"
.TextOrProperty = "NaN"
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
.Execute

For Each f In .FoundFiles

MsgBox f
Next f
End With

End Sub



90 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:29:11 ]
あたりまえ



91 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:35:14 ]
へー、そんなメソッドがあったのか
知らんかった

お礼にヒントをあげよう

Sub SearchXLS()
Dim wbkTemp As Workbook

For Each wbkTemp In Application.Workbooks
Debug.Print wbkTemp.Name
Debug.Print wbkTemp.Worksheets(1).Name
Call wkbTemp.Close(False)
Next

End Sub

92 名前:デフォルトの名無しさん [2007/09/27(木) 23:09:36 ]
>>86
回答ありがとうございます。
やっと調査できるきっかけができました。

93 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:59:10 ]
押されたコマンドボタンのオブジェクトは
どうやって取得すればよいのでしょうか?

94 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 08:25:32 ]
>>93
普通に

95 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 18:15:32 ]
OSはXP、エクセルは2000を使っています。
VBAでソルバーの作業を記録して、実行しようとするとエラーが出ます。
VBAでソルバーは使えないのでしょうか?
使えるのであれば、是非方法を教えてください。お願いします。

96 名前:デフォルトの名無しさん [2007/09/29(土) 21:09:22 ]
C、C++のincludeにあたる機能はあるのでしょうか

他のSheet(というかモジュール)のマクロ関数を呼びたいのですが・・・よろしくお願いします。

97 名前:96 mailto:sage [2007/09/29(土) 21:23:05 ]
検索ワード変えたら見つかりました、すんまそん>Run

98 名前:デフォルトの名無しさん [2007/10/01(月) 01:53:56 ]
■長さ0の空白をempty値にしない方法教えてください
次のような代入をすると、右側のセルの""(長さ0の空白)が左側にはempty値に変換されて代入されます

Sheets("Sheet1").Range("A1:Z1").Value = Sheets("Sheet2").Range("A1:Z1").Value

もともとのデータで0と区別するために、あえて""が入ってるので、empty値に換えて欲しくないのです。
そもそも、VBAで
Sheets("Sheet1").Range("A1:Z1").Value = ""
と入れると、各セルにはempty値が入るみたいです。
(excel 2000、windows 2000)

以上、よろしく

99 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 03:36:46 ]
>>98
Sub test()
  [A1].NumberFormat = "@"
  [A1].Value = ""
  Debug.Print TypeName([A1].Value)

  [A1].NumberFormatLocal = "G/標準"
  [A1].Value = ""
  Debug.Print TypeName([A1].Value)
End Sub


「Value = ""」の代入をするとEmpty値が入るのではなく
表示形式「G/標準」のセルにNullStringを代入するとEmpty値として扱われる
NullString("")は文字通りString(文字列)なんだから、文字列として扱って欲しければ
文字列の表示形式である「@」を設定してから代入すればいい

あとは値(Value)の代入ではなくセルのコピーを行ってもいいし
NullStringを返す数式「=""」を入力してやる手もある
[A1].Formula = "="""""

100 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 11:58:45 ]
>>99
ありがとうございます、こんな感じでOKですね。

Sheets("Sheet1").Range("A1:Z1").NumberFormat = "@"
Sheets("Sheet1").Range("A1:Z1").Value = Sheets("Sheet2").Range("A1:Z1").Value
Sheets("Sheet1").Range("A1:Z1").NumberFormat = Sheets("Sheet2").Range("A1:Z1").NumberFormat

■セルのコピーとは、Selection.Copyとかですかね?
 処理中にシートの切り替えとかの操作により、影響を受けそうな感じで使いたくないです








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef