Excel VBA質問スレ Part4
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/09/15(土) 09:03:22ExcelのVBAに関する質問スレです
質問前に 【 >>2-3 】 あたりを良く読むこと
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1180192018/
0002デフォルトの名無しさん
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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0003デフォルトの名無しさん
2007/09/15(土) 09:03:38・過去スレ
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
0004デフォルトの名無しさん
2007/09/18(火) 07:04:470005デフォルトの名無しさん
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です
0006デフォルトの名無しさん
2007/09/18(火) 23:06:440007デフォルトの名無しさん
2007/09/18(火) 23:07:26シートの関数も知らないで聞いてる訳じゃないだろ?
0008デフォルトの名無しさん
2007/09/18(火) 23:15:5500095
2007/09/18(火) 23:15:56offsetが目的に使えそうです。
有難うございます。
>>7
すんません、関数もVBAもほとんど知りません。
大昔にC言語でゴリゴリソース書いていたことはあるのですが・・・・
00105
2007/09/18(火) 23:19:41とりあえず条件付き書式で作ってみたんですが
空白の部分にも1000を入れる必要があるのと
条件を満たした時に音を鳴らしたいのでVBA化するつもりです。
(音の鳴らし方は調べて分かりました)
0011デフォルトの名無しさん
2007/09/19(水) 21:40:05その後にフォルダとその下層のファイルをクリップボードに張り付ける事は可能ですか?
可能であればヒントだけでも頂ければ・・・
0012デフォルトの名無しさん
2007/09/19(水) 21:50:24可能だけど>>2★3★4
0013デフォルトの名無しさん
2007/09/19(水) 21:53:180014デフォルトの名無しさん
2007/09/20(木) 20:12:47たとえば、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名を変数で指定することはできないのでしょうか?
0015デフォルトの名無しさん
2007/09/20(木) 20:25:27とりあえず
INDIRECT2 = SHEETNAME.Cells(B, C)
は
INDIRECT2 = SHEETNAME.Cells(B, C).Value
こうしろ
0016デフォルトの名無しさん
2007/09/20(木) 20:33:440017前スレ984
2007/09/20(木) 22:46:42fName = 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
こんな感じで、コンボボックス内のテキストファイル名を取り出す処理はできたのですが、
最後に一回空白が返ってきてしまいます。
どのようにすれば改善できるでしょうか?
0018デフォルトの名無しさん
2007/09/20(木) 23:39:49001914
2007/09/21(金) 14:05:42Function 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"のように、ほかのブックの値を参照させることはできないのでしょうか?
0020デフォルトの名無しさん
2007/09/21(金) 20:32:140021デフォルトの名無しさん
2007/09/22(土) 09:53:52WindowsXPでエクセル2003を使用しています。
下記のように
a
--
b
--
c
--
d
と縦に並んでいる文字列をコピーして
行と列を入れ替えて、それぞの文字を2つずつに
増やして貼り付けしたいのですが、これは可能でしょうか?
a│a│b│b│c│c│d│d│
いろいろ考えたのですが上手い方法が思いつきません。
もし可能でしたらヒントを頂けないでしょうか?
よろしくお願い致します。
0022デフォルトの名無しさん
2007/09/22(土) 12:00:22range
For each
002321
2007/09/22(土) 14:23:2722さんのヒントを見てから
1時間ぐらいネットで調べたりして考えたんですが
やっぱり分かりません(T_T)
私の職場は女性ばかりでプログラムに強い人が
いなくて職場では誰にも聞けません。。
もし良かったらもう少しヒントを頂けないでしょうか?
よろしくお願い致します。
0024デフォルトの名無しさん
2007/09/22(土) 14:46:28説明するの面倒だから、一セルずつコピーしたら?
002521
2007/09/22(土) 15:24:48例ではa〜dまでしか書きませんでしたが、実際は膨大な量なんですよ(^^;)
1セルずつコピーしてたらものすごく時間がかかるんです。
この問題さえクリア出来れば全ての作業を自動化出来るのですが・・・。
お手数おかけして申し訳ありませんでした。
私の今の実力では無理ですが、いつかは自分で出来るように頑張ります!
0026デフォルトの名無しさん
2007/09/22(土) 15:36:41まさか、描画や再計算を止めてないって落ちはないよね?
あなたの言う膨大がどれほどか判らないけれど、100や200のセルのコピーくらい大して時間掛かりませんが。
002721
2007/09/22(土) 16:18:45プログラム完成してないので再計算を止めてないも何も動かしていません(T_T)
200のセルのコピーぐらい大して時間がかからないとの事ですが、
すべてのセルを2倍にして、縦横入れ替えていたらミスも発生するし
作業時間が勿体ないと感じるのです。
その時間が他の仕事に当てられたらと思い、家で考えていました。
もっと勉強してから出直して来ます。
0029デフォルトの名無しさん
2007/09/22(土) 16:27:04マクロで実行したときの話だと思うが。
0030デフォルトの名無しさん
2007/09/22(土) 16:40:46完成してりゃあ100や200のコピーぐらいすぐ終わるっしょ。
完成して無い奴に
100や200のセルのコピーくらい大して時間掛かりませんが
とか言っても意味無いっしょw
0031デフォルトの名無しさん
2007/09/22(土) 16:55:36# だとしたら鼬害なのだが。
0032デフォルトの名無しさん
2007/09/22(土) 17:16:200033デフォルトの名無しさん
2007/09/22(土) 17:23:35しかし、セルを一つずつコピーするようなマクロも書けないので一から教えろ。
と言う話なのかな?
0034デフォルトの名無しさん
2007/09/22(土) 18:18:59素直に手動でコピって、形式を選択して貼り付けで行列変換しとけ
0035デフォルトの名無しさん
2007/09/22(土) 19:56:11分かるんなら正解かいてやれよ。
0036デフォルトの名無しさん
2007/09/22(土) 20:02:440037デフォルトの名無しさん
2007/09/22(土) 20:54:310038デフォルトの名無しさん
2007/09/22(土) 20:56:56それがVBAスレクオリティ
0039デフォルトの名無しさん
2007/09/22(土) 21:02:29それを叩いてるのは自演か過去に丸投げやクレクレして冷たくあしらわれた事が有る奴等w
0040デフォルトの名無しさん
2007/09/22(土) 21:24:500041デフォルトの名無しさん
2007/09/23(日) 00:36:160042デフォルトの名無しさん
2007/09/23(日) 00:53:270043デフォルトの名無しさん
2007/09/23(日) 02:53:50>>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
まぁ参考程度に。
てか、ここの住人なら俺なんかより良いコードかけるだろうに
ホントいけずだな
0044デフォルトの名無しさん
2007/09/23(日) 05:39:06a = 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
0045デフォルトの名無しさん
2007/09/23(日) 05:45:250046デフォルトの名無しさん
2007/09/23(日) 05:51:13ソースのヒントも書かない糞野郎さん
0047デフォルトの名無しさん
2007/09/23(日) 06:12:08ビジネスsoft板のと統合しちまえよ
こんな糞スレ要らん
0048デフォルトの名無しさん
2007/09/23(日) 09:07:11Dim 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 はループは閉じるとこから始めような。
0049デフォルトの名無しさん
2007/09/23(日) 11:23:570050デフォルトの名無しさん
2007/09/23(日) 13:17:15DataObject使うかWin32API使え
>>2★5なので、あとは自分で頑張ろう
0051デフォルトの名無しさん
2007/09/23(日) 13:36:33ああすまん Loop書きわ忘れてたな
一応VBA歴3ヶ月って書いてあったから行列の入れ替えと二列づつて書く方法がたまたま思いつかなかったんじゃないかね?
そのヒントすら教えんで ただ罵倒してるのにイラついたもんで
ヒントくださいっていってるしな
0052デフォルトの名無しさん
2007/09/23(日) 13:38:320053デフォルトの名無しさん
2007/09/23(日) 14:18:240054デフォルトの名無しさん
2007/09/23(日) 20:14:16「ヒントすら教えん」とか言われてモナ
これ以上どうしろっつーんだよ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
0055デフォルトの名無しさん
2007/09/23(日) 20:40:34考え自体は肯定も否定もしないがそのレスは何なのw
そう思ってたからみんなスルーしてただけだろ。
たまーに質問者放置でコード談義に盛り上がり、たまーに優しい人がいて、
基本は「スレ違い」で終わるだけのスレじゃんw
0056デフォルトの名無しさん
2007/09/23(日) 21:36:01まぁここはExcel VBA雑談スレだからなぁ
0057デフォルトの名無しさん
2007/09/23(日) 21:45:39> そう思ってたからみんなスルーしてただけだろ。
なるほどな
「みんなもそう思ってる」とかその系統か
クレクレ脳を基準に「ヒントもない」とか強弁しなさんなよ
0058デフォルトの名無しさん
2007/09/24(月) 14:13:20ver:2003
宣言セクションでモジュールレベル変数やパブリック変数を
宣言する際に、初期値を格納したのですが、どう記述すればいいんでしょうか?
005958
2007/09/24(月) 14:14:27↓
○ 初期値を格納したいのですが、・・・
0060デフォルトの名無しさん
2007/09/24(月) 14:42:10まとめて初期値入れるプロシージャでもつくっとけ
0061デフォルトの名無しさん
2007/09/24(月) 15:02:330062デフォルトの名無しさん
2007/09/24(月) 15:16:180063デフォルトの名無しさん
2007/09/24(月) 15:43:20をVBAから操作するにはどうすればよいのでしょうか?
0064デフォルトの名無しさん
2007/09/24(月) 16:04:26それが出来ちゃったら"脆弱性"と呼ばれるだろうなw
0065デフォルトの名無しさん
2007/09/25(火) 00:31:37a
b
c
d
a
b
c
d
というデータを用意して,並べ替えたら
a
a
b
b
c
c
d
d
になるでしょ。
その後コピーしてから「形式を選択して貼り付け」します。
この時「行列を入れ替える」をチェックしてね。
すると
aabbccdd
になるよ。
0066デフォルトの名無しさん
2007/09/25(火) 00:44:51ツールバーなら出来るみたいだけど。
メニューエディタは見当たらないし仕様上無理ですか?
0067デフォルトの名無しさん
2007/09/25(火) 01:51:34ついでに「それをマクロ記録してショートカットキー登録」すれば十分だったりするかなw
0068デフォルトの名無しさん
2007/09/25(火) 02:09:59無理
ただしOCX自作するならその限りではない
0069デフォルトの名無しさん
2007/09/25(火) 03:01:24素早い回答ありがとうございます。
OCX?ですか。多分無理そうなのであきらめます…。
0070デフォルトの名無しさん
2007/09/25(火) 20:49:01Range("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番目も駄目なような気がするんだけど?
0071デフォルトの名無しさん
2007/09/25(火) 20:54:34下はSheet1.Cells(1,1)じゃないとダメってことだろ
Sheet1.Activateすれば下でも通るでしょ
0072デフォルトの名無しさん
2007/09/25(火) 21:19:07Sheet1.Range(Cells(hoge))って記法だと
Rangeまでは上位オブジェクトが参照できている
しかし(Cells(hoge))だとCellsの上位オブジェクトが分からない
だからその場合VBA側で「とりあえずアクティブシートを参照」するわけだ
これだと期待する動作かどうか判然としない
Activate,Select系を使わないのが望ましいというのは、こういうことから
つまり面倒でも.Sheet1.Range(Sheet1.Cells(hoge,hoge),Sheet1.Cells(hoge2,hoge2))
って記法にしなくてはならない
ソースが読みづらくなるので、こう言うときは通常はWithステートメントを使う
0073デフォルトの名無しさん
2007/09/25(火) 21:28:210074デフォルトの名無しさん
2007/09/25(火) 23:25:510075デフォルトの名無しさん
2007/09/25(火) 23:36:49Sheet1.Range(Range("A1").Address, Cells(3, 3).Address).Borders.LineStyle = True
これはOKだったりして
0076デフォルトの名無しさん
2007/09/26(水) 19:42:21これと同じようにセルにボタンのような機能を持たせる事は可能でしょうか?
見た目はボタンでなくてもいいです。
実現したいことはあるセルのボタンをクリックすると隣のセルの入力文字を
取得したいのです。通常のコントロールボックスのボタンだとどのセルにも
置けてしまうので隣のセルの文字列取得はできないと思うのです。
VBで言えばSPREADの一つのセルをボタン型にしたようなものです。
要はクリックされれば隣のセルの文字列を取得しメッセージボックスで表示
させるような処理がしたいのです。
0077デフォルトの名無しさん
2007/09/26(水) 19:53:460078デフォルトの名無しさん
2007/09/26(水) 21:02:460079デフォルトの名無しさん
2007/09/26(水) 22:00:11配置されたセルが取得できるとは知りませんでした。
セル間の微妙な位置にも置けると思うので・・・
配置されたセルの取得方法はどうすればいいのでしょうか?
0080デフォルトの名無しさん
2007/09/26(水) 22:01:530081デフォルトの名無しさん
2007/09/26(水) 22:14:30if cells(i,1).value ="飛ばす" then □
○○
next i
□で、今回のループだけ抜けたいときはどうすればいいんでしょう
(ようするに、A列に特定文字が入ってるときは○○を実行させたくない)
nextだとエラー、
end forだとfor〜next自体が終わってしまう
elseで囲めばいいんだけど○○の部分が凄く長くて見通しが悪くなるので
なんかどうにかしたかった。
0082デフォルトの名無しさん
2007/09/26(水) 22:17:020083デフォルトの名無しさん
2007/09/26(水) 22:56:57すみません。うまく見つける事ができません。
0084デフォルトの名無しさん
2007/09/26(水) 23:40:49Continueは?
0085デフォルトの名無しさん
2007/09/27(木) 00:12:170086デフォルトの名無しさん
2007/09/27(木) 00:34:22CommandButton1だったら
CommandButton1.BottomRightCell.Address
とか
0087デフォルトの名無しさん
2007/09/27(木) 01:19:33このプログラムを使って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
0088デフォルトの名無しさん
2007/09/27(木) 07:15:140089デフォルトの名無しさん
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
0090デフォルトの名無しさん
2007/09/27(木) 12:29:110091デフォルトの名無しさん
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
0092デフォルトの名無しさん
2007/09/27(木) 23:09:36回答ありがとうございます。
やっと調査できるきっかけができました。
0093デフォルトの名無しさん
2007/09/28(金) 01:59:10どうやって取得すればよいのでしょうか?
0094デフォルトの名無しさん
2007/09/28(金) 08:25:32普通に
0095デフォルトの名無しさん
2007/09/28(金) 18:15:32VBAでソルバーの作業を記録して、実行しようとするとエラーが出ます。
VBAでソルバーは使えないのでしょうか?
使えるのであれば、是非方法を教えてください。お願いします。
0096デフォルトの名無しさん
2007/09/29(土) 21:09:22他のSheet(というかモジュール)のマクロ関数を呼びたいのですが・・・よろしくお願いします。
009796
2007/09/29(土) 21:23:050098デフォルトの名無しさん
2007/10/01(月) 01:53:56次のような代入をすると、右側のセルの""(長さ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)
以上、よろしく
0099デフォルトの名無しさん
2007/10/01(月) 03:36:46Sub 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 = "="""""
0100デフォルトの名無しさん
2007/10/01(月) 11:58:45ありがとうございます、こんな感じで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とかですかね?
処理中にシートの切り替えとかの操作により、影響を受けそうな感じで使いたくないです
0101デフォルトの名無しさん
2007/10/01(月) 21:37:580102デフォルトの名無しさん
2007/10/02(火) 02:18:311001.xls みたいに
0103デフォルトの名無しさん
2007/10/02(火) 04:30:070104デフォルトの名無しさん
2007/10/02(火) 07:57:21つ[time()]
つ[localtime()]
つ[strftime()]
つ[fopen()]
いけね、Cスレじゃなかった。
0105デフォルトの名無しさん
2007/10/02(火) 08:18:000106デフォルトの名無しさん
2007/10/03(水) 09:42:520107デフォルトの名無しさん
2007/10/03(水) 10:24:49For~Nextで複数のCheckBoxを使いたいと思っているのですが上手く行きません
0108107
2007/10/03(水) 10:27:190109デフォルトの名無しさん
2007/10/03(水) 11:17:43Excel コントロール配列
でググってみ
0110デフォルトの名無しさん
2007/10/04(木) 01:57:44クラスのインスタンスを生成する方法として
下記の2つの方法に機能的な違いはありますか??
【方法�@】
Dim myObj As class
Set myObj = New class
【方法�A】
Dim myObj As New class
�Aはただ単に�@を1行にまとめただけ???
0111デフォルトの名無しさん
2007/10/04(木) 02:29:56Dim aaa As Range
Application.DisplayAlerts = False
On Error Resume Next
Set aaa = Application.InputBox(prompt:="セル範囲を指定してください", Title:="桁を合わせます", Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If aaa Is Nothing Then
MsgBox ("終了します")
Exit Sub
Else
Select Case aaa
Case Is >= 100
aaa.NumberFormatLocal = "0"
Case 10 To 99
aaa.NumberFormatLocal = "0.0"
Case 1 To 9
aaa.NumberFormatLocal = "0.00"
Case Is <= 0
aaa.NumberFormatLocal = "0.000"
End Select
End If
End Sub
単一セルに対してなら処理できるのですが、セル範囲指定だと、型が一致しなくなってしまいます
それと上記のままだと、数値が0以下のとき(0.123456789なら0.123って表示したい)うまく動作しません
なので変数でSingleを宣言したら、今度は整数が処理できなくなってしまいました
どこを直したら、いいでしょうか つたないソースですが、よろしくお願いします
0112デフォルトの名無しさん
2007/10/04(木) 05:46:41オブジェクト指向を勉強してくれ
0113デフォルトの名無しさん
2007/10/04(木) 08:21:51出来ました、ありがとうございます
0114デフォルトの名無しさん
2007/10/04(木) 13:26:48Sub 桁合わせる()
Dim aaa As Range
Dim myCell As Range
省略
Else
For Each myCell In aaa
Select Case myCell.Value
Case Is >= 100
myCell.NumberFormatLocal = "0"
Case 10 To 99
myCell.NumberFormatLocal = "0.0"
Case 1 To 9
myCell.NumberFormatLocal = "0.00"
Case Is < 1
myCell.NumberFormatLocal = "0.000"
End Select
Next
End If
End Sub
>数値が0以下のとき(0.123456789なら0.123って表示したい)うまく動作しません
0.123456789は0より大きい数値だから0以下が条件では動作しない
0115デフォルトの名無しさん
2007/10/04(木) 15:43:420116デフォルトの名無しさん
2007/10/04(木) 15:44:12今勉強中
0117デフォルトの名無しさん
2007/10/04(木) 21:26:51機能的には同じ。
0118デフォルトの名無しさん
2007/10/04(木) 21:38:340119デフォルトの名無しさん
2007/10/04(木) 21:56:38探してデータを更新するというマクロを作成しようとしています。
(Microsoft Scripting Runtimeを参照設定しています)
Dim FSO As FileSystemObject
Dim dataFolder As Folder
Dim pathName As String ←指定するフォルダ名
Set FSO = CreateObject("Scripting.FileSystemObject")
dataFolder = FSO.GetFolder(pathName)
…
とやりたいのですが、dataFolderの設定を入れようとすると 「As folder」と
変換されてしまってうまくいきません。
他は大丈夫でFolderの指定だけできないので自分の書いたソースが悪いと思うのですが
どうにも見当がつきません。
何をチェックすると解決できるのでしょうか?
0120デフォルトの名無しさん
2007/10/04(木) 22:06:03Set dataFolder = FSO.GetFolder(pathName)
な
0121デフォルトの名無しさん
2007/10/05(金) 00:24:30機能的な違いはないが、MS推奨では宣言と初期化を分けるように書かれている
オブジェクト指向云々は一切関係ない
コーディング規約の問題
>>119
オブジェクトブラウザ見れ
Dim objFSO As Scripting.FileSystemObject
Dim objFld As Scripting.Folder
Dim objFile As Scripting.File
Set objFSO = New Scripting.FileSystemObject
Set objFld = objFSO.GetFolder(ThisWorkbook.Path)
For Each objFile In objFld.Files
Debug.Print objFile.Name
Next
Set objFile = Nothing
Set objFld = Nothing
Set objFSO = Nothing
Set objFile = Nothing
Set objFld = Nothing
Set objFSO = Nothing
0122デフォルトの名無しさん
2007/10/05(金) 00:26:220123110
2007/10/05(金) 02:47:11なるほど!さんくすです!勉強になりました!
0124デフォルトの名無しさん
2007/10/05(金) 08:24:330125デフォルトの名無しさん
2007/10/05(金) 10:55:49性交から学べることは何一つない
0126119
2007/10/05(金) 19:12:20ありがとうございます。
参考にしながら1から作り直したところ今のところはうまくいっています。
Setで設定してなかったから駄目だった、ということなのでしょうか。
教えてくださってありがとうございました。
0127デフォルトの名無しさん
2007/10/06(土) 00:30:120128デフォルトの名無しさん
2007/10/06(土) 07:12:430129デフォルトの名無しさん
2007/10/06(土) 15:16:25とても勉強になりました。ありがとうございます
0130デフォルトの名無しさん
2007/10/06(土) 19:36:50以前どこかで
(1)のやり方の方にしないとNothingにしても
メモリが解放されないと聞いた。
0131デフォルトの名無しさん
2007/10/06(土) 19:58:000132デフォルトの名無しさん
2007/10/06(土) 20:13:050133デフォルトの名無しさん
2007/10/06(土) 20:29:300134デフォルトの名無しさん
2007/10/06(土) 20:40:38例をあげてみてよ
0135デフォルトの名無しさん
2007/10/06(土) 21:03:140136デフォルトの名無しさん
2007/10/06(土) 21:32:08デストラクタが解放を拒んだらそこでリークになる
0137デフォルトの名無しさん
2007/10/07(日) 14:28:33VBAで引数に範囲があるWorksheet関数を使用したいのですが
VBA上の配列を範囲に指定することが出来ません。
どのようにすれば、使用できるのかご教授願います。
RANK(数値,範囲,順序)
Dim Hht(9) As Double
Dim i As Long
中略
Hrank = WorksheetFunction.rank(Hht(i), Hht)
Hhtで型が一致しませんとエラーがでる。
0138デフォルトの名無しさん
2007/10/07(日) 15:23:100139デフォルトの名無しさん
2007/10/07(日) 16:00:44この連休でデーター仕事を行なっていますが、
なにせ未熟者、手作業で遅々として進みません。
皆さんのお力お借りしたいです、よろしくお願いいたします。
以下のようなデーターがありまして、
黒★の列は時間なのですが、
これを一秒ごとに行を空けたいのです。
時間は5秒毎というわけではなく、10秒であったり、
18秒であったりとランダムに出現します。
この表であれば各4行づつ空けたいのです。
他の列は空白でかまいません。時間さえ一秒ごとに埋まってくれれば…。
どなたか教えていただけませんか?
ググレば出て来るのなら、ググレカスでもかまいません、
なんでもアドバイスよろしくお願いいたします。
★
T1|No. 1|34.4149|135.31245|10.7|2007/9/12|5:18:30|WGS84|-9999.9|-9999.9
T1|No. 2|34.4149|135.31245|11.7|2007/9/12|5:18:35|WGS84|-9999.9|-9999.9
T1|No. 3|34.4149|135.31245|13.6|2007/9/12|5:18:40|WGS84|-9999.9|-9999.9
T1|No. 4|34.4149|135.31245|14.6|2007/9/12|5:18:45|WGS84|-9999.9|-9999.9
T1|No. 5|34.4149|135.31245|14.6|2007/9/12|5:18:50|WGS84|-9999.9|-9999.9
0140139
2007/10/07(日) 16:04:40他のセルは空白でかまいません。時間さえ一秒ごとに埋まってくれれば…。○
すみません。説明が悪いです。
0141デフォルトの名無しさん
2007/10/07(日) 17:12:34範囲は文字通りrange
>>138
黙ってろ
>>139
何がしたいんだか皆目わかんね
0142デフォルトの名無しさん
2007/10/07(日) 17:45:095:18:30のセルを選択5:18:30を変数に入れる
カーソルをひとつ下に5:18:35を変数に入れる
2つの変数から差の秒数を取得
秒数だけ繰り返し行を挿入
1秒増やした時間をセルに入れながらカーソルを下に移動
以上を繰り返す
0143デフォルトの名無しさん
2007/10/07(日) 19:42:03シート行数が有限であるので判定が面倒くさくなる
最終時間と開始時間との差を導出して、開始時間から終了時間まで1秒づつステップしたカウント数を算出
Yにそのカウント数、Xに10個という配列を作る
配列を開始時間から最終時間まで1秒をステップした数で初期化
データを読み出して一致する時間があればデータをセット
終わったら書き出す
こんでいいはず
0144デフォルトの名無しさん
2007/10/07(日) 19:44:01なんか、過去スレでも、ほとんど同じ質問を教えてあげた気がする。
素直に142のいう通りにやったらいいと思う。
ちなみに、2つの秒差を求める式(Date2-Date1)は、
変数=DateDiff("s",Date1,Date2)
0145デフォルトの名無しさん
2007/10/07(日) 20:26:500146137
2007/10/07(日) 21:13:17レスありがとう御座います。
Rangeの使い方がわまりません。
コードの書き方を示して頂けないでしょうか?
0147デフォルトの名無しさん
2007/10/07(日) 21:57:200148デフォルトの名無しさん
2007/10/07(日) 22:03:17Public Sub OshietekunTruth()
dim rngAnswer as range
dim rngOshiete as range
dim blnRes as boolean
set rngAnswer=activesheet.range("A1:Z99")
For Each rngOshiete in rngAnswer
If rngOshiete.Value Like "*書き方を示してください*" Then
rngOshiete.Value= "書き方教えろや"
End if
Next
End Sub
0149デフォルトの名無しさん
2007/10/08(月) 08:56:22コマンドボタンをも貼り付けるにはどうすればいいのでしょうか?
動的にコマンドボタンを作成する方法でもいいのですが・・・
0150デフォルトの名無しさん
2007/10/08(月) 09:12:41http://www.google.co.jp/search?num=100&hl=ja&q=%E5%8B%95%E7%9A%84%E3%81%AB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95&lr=lang_ja
0151デフォルトの名無しさん
2007/10/08(月) 09:14:20ありがとう御座います。
Dim R As Range
Set R=Worksheets("Sheet1").Range("A1:C10")
an=Application.WorksheetFunction.Min(R)
こんな感じで使うことはできるのですが
配列の値をいったんシートに入れないといけないのでしょうか?
シートを使用せずにRange変数に入れるにはどうしたらよいのでしょうか?
0152デフォルトの名無しさん
2007/10/08(月) 09:35:23調べたのですが・・・ユーザフォームでなくセルに配置してあるボタンを
コピーできればいいのですが。現状できないようですし、
できないのならセルコピー後なんらかのマクロで指定されたボタンとボタンをクリックされた
ときのプロシージャを動的に作成できないのかと探していましたが
そういった処理の例はなかなか無いようで・・・
0153デフォルトの名無しさん
2007/10/08(月) 10:21:10そのRangeはあくまでも参照なのでメモリ上に作るって用途じゃない
ただRangeのValueは2次元配列と互換できるんで、2次元配列で処理して一括代入が可能
こんな感じで
Dim objRange as Range
Redim varArray(9,2) 'Y,Xの形式で2次元配列を宣言
(適当に配列を初期化)
With ThisWorkbook.Worksheets("Sheet1")
Set objRange=.Range(.Cells(1,1),.Cells(10,3))
objRange.Value=varArray
>>152
>そういった処理の例はなかなか無いようで・・・
検索リンク先を本当に見たのかね?
OLEObjectsとかモロで出てくるんだがね
0154139
2007/10/08(月) 12:38:42パート2で、10秒おきに行を挿入するマクロを
書いていただいた方ですか?あの時は、ホント助かりました。
先月までバリバリ使ってました。ありがとうございました。
ちょっとは勉強しようと思ってるのですが、
数字の処理に追われて、全然スキルがあがってません。
教えて君ですみません。
0155137
2007/10/08(月) 23:13:13ありがとう御座いました。
範囲指定が必要なワークシート関数が使用できるようになりました。
objRange.Value=varArray
のようにコードを書くとシート上に配列の値が入ってしまうようです。
ワークシート関数の範囲指定をVBAのコード内で完結することはできないのかな。
0156デフォルトの名無しさん
2007/10/08(月) 23:32:550157デフォルトの名無しさん
2007/10/09(火) 16:23:19getrank = 1
For i = 0 To UBound(arrayx)
If arrayx(i) > arrayx(idx) Then getrank = getrank + 1
Next
End Function
>>137のレス行数の半分以下でできた
0158デフォルトの名無しさん
2007/10/09(火) 19:35:21ListboxのListに書き出す書き方ってどうするんですか?
あああ あああ
いいい いいい
えええ −−−> えええ
あああ おおお
いいい
おおお
なかなか、うまく除けないです。
0159デフォルトの名無しさん
2007/10/09(火) 19:40:530160デフォルトの名無しさん
2007/10/09(火) 19:54:280161デフォルトの名無しさん
2007/10/09(火) 20:24:01ちょっと難しそうですが、おもしろそうです。
>>160
おおー、ありがとうございます。
早いレスありがとうございます。
0162デフォルトの名無しさん
2007/10/09(火) 22:13:33collectionを使って、重複にエラーでできました。
ありがとうございました。
0163デフォルトの名無しさん
2007/10/10(水) 01:55:390164デフォルトの名無しさん
2007/10/10(水) 03:33:510165デフォルトの名無しさん
2007/10/10(水) 04:38:19またそのきっかけは?
0166デフォルトの名無しさん
2007/10/10(水) 08:13:48必要に迫られて
0167デフォルトの名無しさん
2007/10/10(水) 08:42:42マクロの記録を弄ってみたら簡単そうで便利そうだったから(事実、簡単で便利だし)
0168デフォルトの名無しさん
2007/10/10(水) 09:32:290169デフォルトの名無しさん
2007/10/10(水) 09:37:25SpecialCells
0170デフォルトの名無しさん
2007/10/10(水) 12:20:17集計をピボットにやらそうと思ったけど、意味不明すぎて
結局SQLに逃げた
0171デフォルトの名無しさん
2007/10/10(水) 13:11:20慣れたら簡単だった
0172デフォルトの名無しさん
2007/10/10(水) 20:43:45セルの選択は
cells(),range(),activecell
移動は
cells(x+1,1),activecell.offset()
じゃないですか
ところで、ワードだと
行の選択や、行の移動の方法は何に該当するでしょうか
0173デフォルトの名無しさん
2007/10/10(水) 22:21:360174デフォルトの名無しさん
2007/10/10(水) 22:22:340175デフォルトの名無しさん
2007/10/10(水) 22:52:00彡
彡
.∧ ∧
ヾ(,,゚Д゚),)
人つゝ 人,,
Yノ人 ノ ノノゞ⌒〜ゞ
. ノ /ミ|\、 ノノ ( 彡
`⌒ .U~U`ヾ 丿
0176デフォルトの名無しさん
2007/10/11(木) 02:55:31ありがとうございます
0177デフォルトの名無しさん
2007/10/11(木) 18:50:56どういったアルゴリズムで判断すればいいでしょうか
select caseとセルの色つけは大丈夫です
プログラムの最初に戻るときは、変数の前に飛ばした方が無難ですか
それとも、一度、変数を宣言したら大丈夫なものなのでしょうか
sub sample()
start:
dim i as integer
0178デフォルトの名無しさん
2007/10/11(木) 19:15:37例えばA1:W100までに「a,b,c,それ以外」のデータが入っているか空白か、の場合
For Each X In Range("A1:W100")
If not X = a and not X = b and not X = c and not X = "" Then
処理
End If
Next
だと全セルを見に行くので、範囲が広がると時間がかかりそうな気がします。
Findメソッドのような形で不一致条件で検索して、またそこから次を検索して、ということはできませんか。
0179デフォルトの名無しさん
2007/10/11(木) 20:16:41TypeName関数
0180デフォルトの名無しさん
2007/10/11(木) 20:45:00それは出来る出来ないではなく「作る」ものだよ。その為のVBA。
時間短縮なら二次元配列に値を取得してからやればかなり速度アップするし
a,b,cではなく"a","b","c"ならlike演算子が使えるし
複数条件使う場合はandで繋げるよりネストした方が速い
ttp://officetanaka.net/excel/vba/speed/s11.htm
のように配列使った検索はFindメソッドより遙かに早いくらいなんで、
速度求めるなら組み込みメソッドに拘るなんてバカらしい
0181デフォルトの名無しさん
2007/10/11(木) 21:26:26Ifの条件節が2つだけでも多数でもAndよりネストのほうが早いんですか?
今まで勝手なイメージで条件のネストや繰り返しより1つのメソッドで済むものは済ませたほうが
早いのかと思っていたので勉強になりました、ありがとうございます。
0182デフォルトの名無しさん
2007/10/12(金) 03:33:270183デフォルトの名無しさん
2007/10/12(金) 05:31:120184exc
2007/10/12(金) 06:46:22VBA楽しくて好きなんですけど仕事ではほとんど使ったことないですね。
データをリスト形式で並べておいてソート,フィルタ,ピボットテーブルレポ
ートでほぼ終わりです。
さびしい。もっと使いたい!
ビジネス用途でなんかおもしろい使い方ないですか?みなさん。
0185exc
2007/10/12(金) 07:10:41品質管理のため毎回5個ずつ抜取検査する商品があり,
測定データが次のような形式で入力されていた。
測定日 商品 値1 値2 値3 値4 値5
10/1 ABC 32 31 34 33 31
10/2 XYZ 45 47 43 42 45
10/3 ABC 35 32 34 31 31
・
・
・
測定値の度数分布を測定日別,商品別にピボットテーブル
レポートで集計したいがこのままの形式ではピボットテー
ブルレポートが使えない。
(続く)
0186exc
2007/10/12(金) 07:11:31そのため
データをVBAで次のように整形した。
測定日 商品 測定番号 値 度数
10/1 ABC 1 32 1
10/1 ABC 2 31 1
10/1 ABC 3 34 1
10/1 ABC 4 33 1
10/1 ABC 5 31 1
10/2 XYZ 1 45 1
・
・
・
これで無事にピボットテーブルレポートが使えた。
以上。
0187デフォルトの名無しさん
2007/10/12(金) 07:19:21個人用EXCEL活用法
http://pc11.2ch.net/test/read.cgi/bsoft/982393911/l50
0188exc
2007/10/12(金) 08:07:15ごめん。確かにこのスレッドの趣旨とは違うかも。
でも誘導先も…。
個人用EXCEL活用法
1 :名無しさん@そうだ選挙にいこう :2001/02/17(土) 16:11
実験結果をただグラフ化するが為にEXCELを購入しました。
今の時点ではそれ以外に使い道が無く、何だか勿体無いように感じます。
ところで皆さんは、仕事以外の日常生活に擱いてどのようにEXCELを活用していますか?
0189デフォルトの名無しさん
2007/10/12(金) 08:19:35株とかFXでいいやん
0190デフォルトの名無しさん
2007/10/12(金) 08:33:47で?
0192デフォルトの名無しさん
2007/10/12(金) 09:24:30そうでもない
0193デフォルトの名無しさん
2007/10/12(金) 14:33:53FormにTextBox×1、ComboBox×3を配置して、
TextBoxに名前を、ComboBoxにはそれぞれ生年・月・日を入力できるようにしました。
入力できますが、重複防止がまだできません。
生年月日の入力時に(Changeイベントで)、名前の重複を検索し、
重複があれば生年月日の重複検索をして、
そこでも重複があれば同一人物として入力不可にしようと思います。
重複の検索の仕方がわからないのですが、
御教示お願いします。
0194デフォルトの名無しさん
2007/10/12(金) 18:30:54単純に検索すればいいだけじゃん
入力された名前か生年月日で検索して、一致が有ればもう一方も一致するかをチェック
両方一致なら重複扱い、もう一方が一致しなければFindNext
Find、FindNextの使い方はヘルプ見てね
0195193
2007/10/12(金) 18:52:20ありがとうございます。
帰ったら早速やってみます。
0196デフォルトの名無しさん
2007/10/12(金) 20:11:23どんなVBA書いたのか知らないけど
そういう整形はUNIONクエリ一行で出来てしまう
0197デフォルトの名無しさん
2007/10/12(金) 20:19:530198exc
2007/10/12(金) 20:48:03ほんとだ!あの時は全然思いつかなかったからVBAでこつこつやっちゃった。
しかしますますVBA使う場面がなくなるな。
0199デフォルトの名無しさん
2007/10/12(金) 22:20:46196じゃないけど、最近、
Accessなどを使わずに
Excelのリスト形式名前付き範囲に対して
ExcelからADO経由でクエリーを実行するのがマイブーム
一度クエリー発行の仕組みを作れば後が楽なので
条件が複雑になればなるほど便利。
というか普通の使い方だと思う。
0200デフォルトの名無しさん
2007/10/13(土) 03:52:50http://www.amazon.co.jp/products/dp/4774122513/
0201デフォルトの名無しさん
2007/10/15(月) 13:02:49できません。
標準モジュールに
Sub auto_open()
Application.DisplayFullScreen = true
UserForm1.Show
End Sub
としたのですが…
Application.DisplayFullScreen = true
の他に
Application.WindowState = xlMaximized
も試してみましたが駄目でした。
どこが間違っているのでしょうか?
0203デフォルトの名無しさん
2007/10/17(水) 02:06:04どなたか教えてください
0204デフォルトの名無しさん
2007/10/17(水) 02:16:11Open "hoge.exe" For Binary As #1
0205デフォルトの名無しさん
2007/10/17(水) 02:21:16すみません・・・本当に初心者でどういうことかわかりません・・・・
ユーザーフォームの出力とかやってみたんですが.frmと.frxというファイルしか出てこなくて何をすればいいのかさっぱり
0206デフォルトの名無しさん
2007/10/17(水) 06:50:260207デフォルトの名無しさん
2007/10/17(水) 08:46:51VB上でActiveSheet.OLEObjects.Add ClassType:="MSComctlLib.Slider.2"
としても、ツールバーから直接追加しても、スライダーが動かせません
デザインモードで形を変えたり位置を移動すると動かせるようになるのですが
プログラム上で同様の操作をしても動かせないときが多いです
おそらく標準以外のコントロールを使用しているためだと思うのですが
どうやったら安定して動かせるようになるでしょうか?
0208デフォルトの名無しさん
2007/10/17(水) 16:32:50ということは作ったプログラムを使うためにはいちいちエクセルを起動しなきゃいけないんですか・・・
0209デフォルトの名無しさん
2007/10/17(水) 16:39:430210デフォルトの名無しさん
2007/10/17(水) 17:05:58すごい遅レスだけど、�@はSet行で実際にNewされてオブジェクトが生成されるけど、
�Aはオブジェクトはその行では生成されないという違いがある。
つまりDimではnewされないってこと。
オブジェクトを10個作るつもりで
dim dic as new dictionary
for i = 1 to 10
dim obj as new myclass
dic.add key, obj
next
とやると実際にはobjは1個しかできないからね。
0211デフォルトの名無しさん
2007/10/17(水) 17:19:27スゲェ。長年のモヤモヤが一気に晴れた
0212デフォルトの名無しさん
2007/10/17(水) 18:18:21エクセルのVBAのフォームを使えば簡単にボタン配置などができて便利なんですがEXEファイルに変換
できないのであれば、やはりCなどで一からつくり直さなくてはいけないんでしょうか。また、VBを使えば
VBAで作ったフォームをEXEに変換できるのですか。
0213デフォルトの名無しさん
2007/10/17(水) 18:21:32プログラムの互換性はあるけど
VBでエクセルを直接操作できるわけじゃないから
そんなこと考えるだけ無駄
0214デフォルトの名無しさん
2007/10/17(水) 18:33:00ようするにVBAは悪魔でもエクセルの一機能で独立させることはできないということですね。
ありがとうございました
0215デフォルトの名無しさん
2007/10/17(水) 20:37:02VBA は Visual Basic for Application の略 OK? ってもう見てないか w
0216デフォルトの名無しさん
2007/10/17(水) 21:44:29ヘルプとネットで調べるのが効率悪くて。
0217デフォルトの名無しさん
2007/10/17(水) 22:08:22というかそれは2回目以降のDimが無視されてるだけ
ともとれるね
0218デフォルトの名無しさん
2007/10/17(水) 22:16:50WSHを勉強してみてごらん
0219デフォルトの名無しさん
2007/10/17(水) 22:20:22>VBでエクセルを直接操作できるわけじゃないから
できるよ
0220デフォルトの名無しさん
2007/10/17(水) 22:21:44ありますよ
0221216
2007/10/17(水) 23:03:56知っているのがありましたら教えてください。
0222216
2007/10/17(水) 23:04:28>>220
知っているのがありましたら教えてください。
0223デフォルトの名無しさん
2007/10/17(水) 23:16:390224デフォルトの名無しさん
2007/10/17(水) 23:25:23ヘルプをプリントアウトすればいんじゃね
自分なりに工夫して纏めて
0225デフォルトの名無しさん
2007/10/18(木) 04:09:55呼び出し部分と戻り値の受け方のサンプルソースは無いでしょうか?
ODBC経由のSQLだと投げたきり返ってきませんが
PL/SQLだと1,2分で返って来るので、何とか使いたいのです。
よろしくお願いします><
0226デフォルトの名無しさん
2007/10/18(木) 09:08:29いえ、Dimはあくまでも宣言文であって、最初のアクセス時に実際にNewされるんです。
Sub Foo()
Dim obj as new myclass
Exit Sub
とすると、Newされません。
まぁこれを「無視されている」というならそのとおりですが・・・
0227デフォルトの名無しさん
2007/10/18(木) 11:24:060228デフォルトの名無しさん
2007/10/18(木) 11:26:41>New
>省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。
>オブジェクト変数を宣言するときにキーワード New を指定した場合は、オブジェクトを
>最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステー
>トメントを使ってオブジェクトへの参照を代入する必要はありません。
0229デフォルトの名無しさん
2007/10/18(木) 12:55:480230デフォルトの名無しさん
2007/10/18(木) 13:51:260231デフォルトの名無しさん
2007/10/18(木) 15:09:520232デフォルトの名無しさん
2007/10/18(木) 18:54:28Cells(1, 2).Value = Date
ActiveSheet.Name = Format(Date, "yyyymmdd")
End Sub
このような感じでボタンをポチっと押すと、
・指定したセルに日付を入力
・現在のシート名を20071018というような名前にしています
これを1日に2回目が必要になったときに(データが重複する時)
・指定したセルに日付を入力
・その真下のセルに「2」というデータを入力
・現在のシート名を「20071018-2」というように通し番号を入力
したいです。
一日に3回目もたまに必要になりますが、
どのように行えばいいでしょうか?
0233デフォルトの名無しさん
2007/10/18(木) 19:54:00Cells(1, 2).Value = Date
Cells(2, 2).Value = SerNum
ActiveSheet.Name = Format(Date, "yyyymmdd") & "-" & Cstr(SerNum)
End Sub
0234デフォルトの名無しさん
2007/10/18(木) 20:34:37レコードが数万、列がレコードによって可変(2〜30くらい)のカンマ区切りのCSVファイルがあって、
その第一列目にだけ特定文字列の置換処理を、出来るだけ高速に行いたいのです。
とりあえず思いつくのは二次元配列に入れて置き換えてそのままCSVでまた書き出す、というもので
Sub csvRead()
'書き込みが長くなるので宣言は省略
' 配列の上限設定
LastCol = 0
Do Until ffile.AtEndOfStream
DataLine = Split(ffile.Readline, ",")
If LastCol < UBound(DataLine) Then LastCol = UBound(DataLine)
Loop
LastRow = ffile.Line - 1
ffile.Close
ReDim TmpData(LastRow, LastCol)
0235デフォルトの名無しさん
2007/10/18(木) 20:35:08Set ffile = fso.OpenTextFile(csvName, ForReading)
R = 0
Do Until ffile.AtEndOfStream
DataLine = Split(ffile.Readline, ",")
For C = 0 To UBound(DataLine)
TmpData(R, C) = DataLine(C)
Next
R = R + 1
Loop
ffile.Close
'以降TmpData(1〜最後まで, 1)に対して置換、CSVを書き出し
End Sub
帰宅してしまってテストしていないのですが、
漠然とこんな感じかと思ったのですがもっと速く処理できる方法はありませんか?
CSVエディタや置換専門のフリーソフトが一番速いとは思うのですがそれはナシとさせてください。
0236232
2007/10/18(木) 20:46:01「引数は省略できません」とエラーがでました。
詳しく状況を書くと、テンプレートのシートがあって、
それを同じブックにコピーします。
そのシート名を日付にしているので、
右のシート名が同じなら、YYYYMMDD-2となってほしいです。
0237デフォルトの名無しさん
2007/10/18(木) 23:20:51AccessVBAで、エクセルVBAのマクロを使用したいのですが上手くいきません。
どちらも2003を使用しています。
アクセス側で「Application.Run "C:\○○.xls!マクロ名" 」と呼び出しているの
ですが、「マクロが見つかりません」とダイアログがでます。
マクロの指定方法が良くないのでしょうか?
最近始めた初心者で、しょうもない質問で申し訳ないです。
0238デフォルトの名無しさん
2007/10/19(金) 00:10:51配列の中でやったほうが速いと思うが、配列からCSVへの保存ってのは時間かかりそうだ。
一発で出来る方法あったっけ、1区切りごとに書き出すことになるんじゃないかな。
かといってワークシートに貼り付けて保存すると文字列が""囲いになったりするし。
0239デフォルトの名無しさん
2007/10/19(金) 07:57:00・置換
・CSVファイルに保存
それぞれのステップで最速になるようにすればいい。
第一のステップはセル上に開なら実は書式を文字列にしてテキストとして
普通に開くのが一番速く配列に格納してから開くのは2番目に速いが、
セル上に開かないで格納するだけなら多分大差ないと思う。置換は比較したことないけど多分配列の中でやるのが最速だろう。
問題は出力だが、二次元配列からCSVに保存ってどうするんだろうな。
列データごとにカンマを挟んでString変数に追記して1レコードずつ書き出して
.TXTで保存してから拡張子をCSVに変えれば""も付かないと思うが、これは遅そうだな。
0240デフォルトの名無しさん
2007/10/19(金) 08:06:11ADOかDAOってのが通例
0241デフォルトの名無しさん
2007/10/19(金) 11:38:16呼び出し方が間違っている
0242デフォルトの名無しさん
2007/10/19(金) 12:06:34ただ>>234
FSOを使うより普通にOPENメソッド使った方が配列への格納時間は短くなる。
0243デフォルトの名無しさん
2007/10/20(土) 00:56:12ネットでいろいろ調べてのですが、
呼び方はこれでは駄目なのでしょうか?
Dim objXL As New Excel.Application
Const f_Name = "C:\test1.xls"
Const m_Name = "test_mc" 'マクロ名
・
・
mc = objXL.Application.Run(f_Name & "!" & m_Name, "Sheet1")
マクロは標準モジュールにあります。
0244デフォルトの名無しさん
2007/10/21(日) 15:42:20(白抜きになっている)
どう対処したらよいでしょうか
0245デフォルトの名無しさん
2007/10/22(月) 17:08:17IF文を使って比較と代入を繰り返す(それまでの最大値より大きい値を持つセルの
場合に行番号をその都度更新していく)のではない方法はありますか?
0246デフォルトの名無しさん
2007/10/22(月) 17:11:36RowとMAX組み合わせりゃ関数でできるだろ
0247デフォルトの名無しさん
2007/10/22(月) 17:17:300248デフォルトの名無しさん
2007/10/22(月) 17:20:32range("a1:c5").find(worksheetfunction.max(range("a1:c5"))).row
0249245
2007/10/22(月) 17:35:53即レスありがとうございます!
worksheetfunction.max(range("a1:c5")).row
あたりまでは何とかたどり着いていたんですけど、その先で行き詰まっていました…
おかげさまで解決できました!!!
ありがとうございました!!!!!
0250デフォルトの名無しさん
2007/10/24(水) 08:04:47俺もなった
ついでにVBE上のIMEも死んだ
仕方がないのでExcel全部再起動
これで直った
0251デフォルトの名無しさん
2007/10/25(木) 14:34:47一旦ここでうかがいます。
環境:Windows XP、Excel 2000(両方とも日本語環境)
Excel の印刷中に出る「印刷中」ダイアログでは、
通常そのメッセージが以下のようになるため
それを想定してプログラムを作成しました。
現在
'[文書名.xls]' を
[プリンタ名] on Nexx: で印刷中です。
ところが、あるユーザの環境で動かないため調べていたら
現在
'[文書名.xls]' を
Nexx: の [プリンタ名] で印刷中です。
と表示されていました。
この3行目の表示が想定外であるためプログラムが動作しません。
これに対して個別対応は可能なのですが、
今後他のケースが出て来ないとも限りません。
そこで質問なのですが、
この「印刷中」ダイアログの表記を変更する方法があるのでしょうか?
方法等、ご存知の方いらっしゃいましたらよろしくお願いいたします。
0252デフォルトの名無しさん
2007/10/25(木) 15:54:21何がしたいのか分からないけど、考え方自体に問題がある気が。
ダイアログを変えるのじゃなくて
ダイアログの文字列を取得できるのなら
取得文字列をうまく利用する方向で
application.ActivePrinter
でプリンタ名は取得できるわけだし
あとは正規表現使うなり、InStr使うなりでなんとかなる気が。
0253デフォルトの名無しさん
2007/10/25(木) 19:13:55ttp://support.microsoft.com/kb/408871/ja
これ、知らんかった。。。
0254デフォルトの名無しさん
2007/10/25(木) 20:14:280255デフォルトの名無しさん
2007/10/25(木) 20:24:460256デフォルトの名無しさん
2007/10/25(木) 20:53:25どのような状況でも変数の値を保持したい場合は、以下の方法を使用します。
? Excel の場合 非表示にしたワークシートに値を記述します。
? Word の場合 文書変数 (Variable オブジェクト) を利用します。
? PowerPoint の場合 非表示スライドなどに値を記述します。
そりゃそうだろうけどさ…
0257デフォルトの名無しさん
2007/10/25(木) 21:05:03>この動作は、VBA の仕様に基づく制限です。
VBAのPublic変数はPublic変数ではないとゆうことだな
0258デフォルトの名無しさん
2007/10/25(木) 21:42:47それのことだよ
0259デフォルトの名無しさん
2007/10/25(木) 22:01:26ハズレ
Visual Basicで作ったアプリだって、アプリを一度終了して再度起動したら変数の値は保持されてないだろ
VBAの場合、「実行可能状態=編集可能状態」なので、実行後は編集可能状態にになるためアプリを一度終了してるのと同じ
まぁ大抵は「編集可能状態」では保持され「編集状態」になると破棄されるんだけどね
>>258も言ってるとおりで、IDE上の実行とかインタプリタ型マクロとか、編集可能な状態で実行されてるものは、ほとんどこういう仕様だよ
普通の実行ファイルとほぼ同じで、終了したら値は保持されない(保持が保証されない)けど
普通の実行ファイルと同じで、実行中は値が保持され、Public変数はPublic変数として正常に機能する
ただ、この「実行中」というのは当然ながら「VBAを含むシートを開いてる間」ではなく「マクロの実行中」なだけ
その辺解ってれば「VBAのPublic変数はPublic変数ではない」なんて勘違いは発生しない
0260デフォルトの名無しさん
2007/10/25(木) 22:45:31むしろ終了後も値が残ってしまう可能性がある事を初めて知った。
毎回必ず初期化されるものだと思っているとハマリそう。
0261デフォルトの名無しさん
2007/10/26(金) 07:49:190262デフォルトの名無しさん
2007/10/26(金) 19:45:380263デフォルトの名無しさん
2007/10/26(金) 21:39:050264デフォルトの名無しさん
2007/10/27(土) 00:04:37グラフウィザードやPivotウィザードとかで範囲選択するときに出てくるアレです
0265デフォルトの名無しさん
2007/10/27(土) 00:41:390266デフォルトの名無しさん
2007/10/27(土) 06:20:260267デフォルトの名無しさん
2007/10/27(土) 07:00:410268デフォルトの名無しさん
2007/10/27(土) 14:42:32ありがとうございます
でも調べてみると色々問題ありそうですね
ttp://www.h3.dion.ne.jp/~sakatsu/Excel_Tips08.htm
0269デフォルトの名無しさん
2007/10/27(土) 16:09:03教えて頂きたいです。
学校の課題なのですが・・・
「三山崩し」をユーザーフォームを利用し、ゲームとして楽しめるようにしなさい。
と出ました。
どなたか作って下さいませんか?
お願いします。
0270デフォルトの名無しさん
2007/10/27(土) 16:54:43まずはお前がどれ程の努力をしたのか見てからだ。
ここはプログラムを提供してもらう場じゃない。
0271デフォルトの名無しさん
2007/10/27(土) 18:14:280272257
2007/10/27(土) 18:23:43Public変数は使うなよ
0273デフォルトの名無しさん
2007/10/27(土) 19:09:05と
>どなたか作って下さいませんか?
わろす
0274デフォルトの名無しさん
2007/10/27(土) 19:24:30そういう時代なんだなあ。
0275デフォルトの名無しさん
2007/10/27(土) 19:29:570276デフォルトの名無しさん
2007/10/27(土) 20:27:040277デフォルトの名無しさん
2007/10/27(土) 20:29:250278デフォルトの名無しさん
2007/10/27(土) 21:59:020279デフォルトの名無しさん
2007/10/27(土) 22:18:370280デフォルトの名無しさん
2007/10/28(日) 00:35:060281デフォルトの名無しさん
2007/10/28(日) 01:46:490282デフォルトの名無しさん
2007/10/28(日) 08:01:150283デフォルトの名無しさん
2007/10/28(日) 09:25:25Sheets("").select
という文で、()の中に入れるシート名を、現在アクティブになっているシートを入れたいです。
どうすればいいでしょうか?
この文じゃなくてもアクティブシート名をセレクトできたら構わないです。
0284デフォルトの名無しさん
2007/10/28(日) 09:30:02お前、自分では少しも調べてないだろ。
最低でも”アクティブシート 取得”ぐらいでググれよ、クズ。
0285デフォルトの名無しさん
2007/10/28(日) 09:34:47dim sht as String
sht = ActiveSheet.Name
MsgBox sht
0286デフォルトの名無しさん
2007/10/28(日) 13:12:580287デフォルトの名無しさん
2007/10/28(日) 13:17:11tsuridattanoka...
0288デフォルトの名無しさん
2007/10/28(日) 15:13:34セレクトされてるよ
でもアクティブシートだけがセレクトされてるとは限らない
283がどう使うのかは解らないが、例えば複数シート選択状態から
非アクティブな選択シートを外してアクティブシートのみの選択にしたい場合は
ActiveSheet.Select
という処理を行う
通常は「アクティブシート=セレクトされてるシート」だが
こういった例外も想定出来るようにならないと良いプログラムは書けないぞ
0289デフォルトの名無しさん
2007/10/28(日) 15:56:31まあ、この場合は元質問が
>この文じゃなくてもアクティブシート名をセレクトできたら構わないです。
だからアクティブシートはセレクトされていますでOKな気もするが。
ところで複数選択時の.Activateと.Selectでの
複数選択解除の挙動が
ActiveSheetに対する場合とActiveCellに対する場合で
逆なのはちょっと面白いと思った。
0290デフォルトの名無しさん
2007/10/28(日) 19:34:570291デフォルトの名無しさん
2007/10/28(日) 20:50:330292デフォルトの名無しさん
2007/10/29(月) 02:14:300293sage
2007/10/29(月) 16:52:09プロジェクトウィンドウやプロパティウィンドウ、コードウィンドウを
分離させて使用していたものを初期状態(ドッキング状態)に戻すには
どうすればいいのでしょうか・・。
0294デフォルトの名無しさん
2007/10/29(月) 22:42:49「プロパティ」とか「イミディエイト」とか表示されている
各ウィンドウのタイトルをダブルクリック。
0295デフォルトの名無しさん
2007/10/30(火) 10:17:17開発側
Windows XP Pro SP2
Office XP
利用者側
WindowsXP, 2000
Offece XP, 2003
開発側で作成したワークブックだけを利用者に渡して、設定とかせずにすぐに利用できるようにしたい。
ワークシート上のある範囲のセル値を、作業ファイルとしてcsvで一時的に保存場所を指定して保存させたい。
保存場所を指定して、作業ファイルを選択してワークシート上に読込ませたい。
といったものを考えています。
0296295
2007/10/30(火) 10:30:54諸般の事情でフォームは使わずに、ワークシート上のボタンにコマンドを割付ける。
フォームであればコントロールを追加すればいいんでしょうけど。
0297sage
2007/10/30(火) 11:21:35アドバイスありがとうございます。
ダブルクリックでプロジェクトウィンドウとプロパティウィンドウは
ドッキングするのですが、コードウィンドウだけがドッキングしてくれません。
こういうものでしょうか?
ドッキングしたプロジェクトウィンドウとプロパティウィンドウがVBEの枠からはみ出るのが
気になるんですが・・
0298デフォルトの名無しさん
2007/10/30(火) 21:22:21GetOpenFilename でサエコれ
0299デフォルトの名無しさん
2007/10/30(火) 22:37:440300デフォルトの名無しさん
2007/10/30(火) 23:25:540301デフォルトの名無しさん
2007/10/31(水) 02:29:17セルに「12:00:00」って書いて.valueなり.formulaR1C1なりで読み出すと
勝手に0.5(だっけ?)になってしまって非常に困ります。
文字列の"12:00:00"として取得したいです。
書式を文字列するのは訳あってできません。
0302デフォルトの名無しさん
2007/10/31(水) 02:44:480303デフォルトの名無しさん
2007/10/31(水) 02:48:530304デフォルトの名無しさん
2007/10/31(水) 07:53:39.Textじゃダメなんだっけ?
0305デフォルトの名無しさん
2007/10/31(水) 08:53:50こんなことやってる奴も居るんだなw
0306デフォルトの名無しさん
2007/10/31(水) 12:36:560307デフォルトの名無しさん
2007/10/31(水) 12:49:110308デフォルトの名無しさん
2007/10/31(水) 13:02:530309デフォルトの名無しさん
2007/10/31(水) 14:45:11おぉ試したら確かに#が返ってきた
非表示だと""が返るのな
勉強になるな〜
ついでに、[h]:mmのときでも
正しく取得できる方法をお願い
0310デフォルトの名無しさん
2007/11/01(木) 00:18:340311デフォルトの名無しさん
2007/11/01(木) 00:32:270312VBA初心者
2007/11/01(木) 16:23:19その上でメッセージボックスにそれぞれのシートの名前を表示させる。
sub macro1()
dim mywd2 as worksheet
dim mywd3 as worksheet
dim res1 as variant
dim res2 as string
set mywd2 = worksheets("data2")
set mywd3 = worksheets("data3")
msgbox mywd2.name
msgbox mywd3.name
やってみたのですが、これで大丈夫でしょうか?
0313デフォルトの名無しさん
2007/11/01(木) 16:57:100314VBA初心者
2007/11/01(木) 17:09:46合っていますか?
0315デフォルトの名無しさん
2007/11/01(木) 19:50:130316デフォルトの名無しさん
2007/11/01(木) 20:10:370317デフォルトの名無しさん
2007/11/01(木) 20:48:26やってみたと書いてるじゃないか。
0318デフォルトの名無しさん
2007/11/01(木) 21:36:03得に問題はないから、この先へは自分で行き着こう
そもそも>>312は条件に関係なく「最適とは言えない」と断定できるが
「なら何が最適か?」となるといろんな条件が関係してくるので
どういう条件で何がしたいのか(名前を表示するだけで終わりではないだろ)を
ほとんど書いてない状況では答えようも無いしね
まあ、後出しでいろいろ書かれてもウザいだけなので後は自分で頑張ろう
0319デフォルトの名無しさん
2007/11/01(木) 21:52:42シート名決め打ちだったらわざわざ取得する意味無いw
0320デフォルトの名無しさん
2007/11/01(木) 23:01:46俺最近VBA触り始めたんだが意外となんでもできるのな。
馬鹿にしてて悪かった。
0321デフォルトの名無しさん
2007/11/01(木) 23:10:39意外となんでもできるのな
VBA使いだすと歯止めが利かなくなってどんどんExcelを使う意味が薄くなる気がする
0322デフォルトの名無しさん
2007/11/02(金) 06:50:210323デフォルトの名無しさん
2007/11/02(金) 09:16:48自分で使うだけのブックならいいけど、後々引継いでもらうような奴だと特に。
0324デフォルトの名無しさん
2007/11/02(金) 11:07:01同じ作業の繰り返しを頼まれて困ってます。
02375290 のようにあらかじめ入力してあるせるセルに
↑ ↑
TKDME D と入力したいですがマクロでできますか?
これをコピペで永遠にやっています。
VBA神さま助けて下さい。
0325デフォルトの名無しさん
2007/11/02(金) 11:10:28文頭にTKDME
0237★5290 ★にDと入れたいという意味です。
0326デフォルトの名無しさん
2007/11/02(金) 11:11:38変換に複数のルールがあるなら、それも書いとけ。
0327デフォルトの名無しさん
2007/11/02(金) 11:15:24Sub foo()
Dim c As Range
For Each c In Selection
c.Value = "TKDME" & Left$(c.Value, 4) & "D" & Right$(c.Value, 4)
Next
End Sub
0328デフォルトの名無しさん
2007/11/02(金) 11:21:34繰り返し作業ができると書いてあったので自力で調べましたがうまく
いかなかったです。
変換前 02375290
変換後 TKDME0237D5290
です。
>>327 ありがとうございます。一度やってみます。!!
0329デフォルトの名無しさん
2007/11/02(金) 11:25:11できました。ありがとうございました。
昼までに作業が終わりそうです。
0330デフォルトの名無しさん
2007/11/02(金) 11:57:420331デフォルトの名無しさん
2007/11/02(金) 12:16:48高単価で潜り込んだ前職テレアポの派遣社員のような気がする。
0332デフォルトの名無しさん
2007/11/02(金) 12:28:17こうかな
これくらいならこっちのほうが楽だけど普通はマクロでやるわな
0333デフォルトの名無しさん
2007/11/02(金) 12:44:430334デフォルトの名無しさん
2007/11/02(金) 12:58:440335デフォルトの名無しさん
2007/11/02(金) 13:13:24# しかし、:,; の扱いが違っているからたまにめんどくさい……
0336デフォルトの名無しさん
2007/11/02(金) 13:21:210337デフォルトの名無しさん
2007/11/02(金) 13:26:13んな再利用もしにくいしょうもないコードをいちいちVBAで記述しろ、と?
ワークシート関数で出来ることはワークシート関数でやるのがEXCELの基本でしょ
ただ単に「おれって出来るんだぜ〜」みたいな痛い自慢をしたいならともかく、生産性に
大きな違いがないなら、汎用性やオペレーションに気を使うのが「普通」の会社人ってもんでそ
0338デフォルトの名無しさん
2007/11/02(金) 13:57:25A1:B10に文字列が設定されてたとして、ワークシート関数だとどう操作するのさ?
0339デフォルトの名無しさん
2007/11/02(金) 13:58:020340デフォルトの名無しさん
2007/11/02(金) 14:04:20それとも、何か痕跡を残さず実行できる、アクロバティックな方法があるのだろうか。
0341デフォルトの名無しさん
2007/11/02(金) 14:15:26普通に考えて、そのセル自身をワークシート関数の結果で置き換えることが、1stepではできない。
0342デフォルトの名無しさん
2007/11/02(金) 14:23:29C1にワークシート関数打ち込んでD10までコピペしろよ
>>341
だからな、毎回やるオペレーションなら、んなしょうもないコードじゃなくて、
ユーザー定義関数を作るとか、VBSだし、そもそも1回こっきりなら一番速いのは
正規表現使えるエディタで置換だ
んで、定常オペレーションでも単なるテキストオペレーションなら、そこはEXCELにこだわらずに、
VBSでD&Dとか考えるべき
VBAに妄執を抱いて他の選択肢が頭にない時点で、おみゃあはセンスが欠如しとる
0343デフォルトの名無しさん
2007/11/02(金) 14:29:560344デフォルトの名無しさん
2007/11/02(金) 14:50:08> >338
> C1にワークシート関数打ち込んでD10までコピペしろよ
それだと>>327とは違う結果になるよね。
> >>341
> だからな、毎回やるオペレーションなら、んなしょうもないコードじゃなくて、
> ユーザー定義関数を作るとか、VBSだし、そもそも1回こっきりなら一番速いのは
> 正規表現使えるエディタで置換だ
> んで、定常オペレーションでも単なるテキストオペレーションなら、そこはEXCELにこだわらずに、
> VBSでD&Dとか考えるべき
> VBAに妄執を抱いて他の選択肢が頭にない時点で、おみゃあはセンスが欠如しとる
どう考えても、327みたいなかき捨てのVBAマクロを書いた方が早いし簡単。
0345デフォルトの名無しさん
2007/11/02(金) 14:54:290346デフォルトの名無しさん
2007/11/02(金) 15:39:33VBAとマクロの区別が曖昧なバカに何を言っても無駄だとはよく分かった
0347デフォルトの名無しさん
2007/11/02(金) 16:32:410348デフォルトの名無しさん
2007/11/02(金) 16:40:320349デフォルトの名無しさん
2007/11/02(金) 17:14:48使い捨てマクロは全否定ですか、そうですか。
一行野郎も全否定なんでしょうね。
0350デフォルトの名無しさん
2007/11/02(金) 17:25:030351デフォルトの名無しさん
2007/11/02(金) 17:31:520352デフォルトの名無しさん
2007/11/02(金) 17:42:03Excel4のもマクロです。(使う人はもういないだろうけど)
0353デフォルトの名無しさん
2007/11/02(金) 17:54:26自分だけが使うようなものじゃないなら、極力VBAを使わない覚悟が必要だよね。
なんでもできるもん!系統の駄目な子って、まずドキュメントを残そうとしないし。
0354デフォルトの名無しさん
2007/11/02(金) 18:11:110355デフォルトの名無しさん
2007/11/02(金) 18:37:29な?
0356デフォルトの名無しさん
2007/11/02(金) 21:22:24何で粘着するのかわからん。
0357デフォルトの名無しさん
2007/11/02(金) 21:43:030358デフォルトの名無しさん
2007/11/02(金) 21:49:010359デフォルトの名無しさん
2007/11/02(金) 22:00:53間抜けすぎだよ>>356
0360デフォルトの名無しさん
2007/11/02(金) 22:04:040361デフォルトの名無しさん
2007/11/02(金) 22:06:33お前はそれで一生やってればいいさ
0362デフォルトの名無しさん
2007/11/02(金) 22:08:100363デフォルトの名無しさん
2007/11/02(金) 22:10:580364デフォルトの名無しさん
2007/11/02(金) 22:12:48悔しがるのは「マクロマクロ」連呼しちゃう自分の間抜けさに対してになー
一つのことにこだわるのは正しいように見えるけど、他の選択肢を考えられない時点で脳が硬化してる
自覚できてよかったな(^ω^)
0365デフォルトの名無しさん
2007/11/02(金) 22:23:35怯えてるなんて
0366デフォルトの名無しさん
2007/11/02(金) 23:32:48ふつー、最も簡単な解決法を示せば、それで終わりだろ。
で、それがマクロだったと。
0367デフォルトの名無しさん
2007/11/02(金) 23:33:36>>357
0368デフォルトの名無しさん
2007/11/02(金) 23:40:02相手にしても利益なし。
0369デフォルトの名無しさん
2007/11/02(金) 23:41:51出先でも他人のPCでもとりあえずなんとかできるのはけっこう助かる。
0370デフォルトの名無しさん
2007/11/02(金) 23:45:42VBAマクロがベストマッチというのに異論が出るのが不思議。
0371デフォルトの名無しさん
2007/11/02(金) 23:51:590372デフォルトの名無しさん
2007/11/03(土) 00:28:04別に>>321はマクロを使うことを否定するつもりで書いたんじゃないし、
この場合マクロを使ったほうが適切だと思う
俺はVBA使ってるとつい VB+出力(たまたまそれがExcelだっただけ)
みたいにしたくなってしまうので、なんとかしないといけないなあと思っただけ
0373デフォルトの名無しさん
2007/11/03(土) 00:31:38どうでもいいけど一応
0374デフォルトの名無しさん
2007/11/03(土) 00:31:460375デフォルトの名無しさん
2007/11/03(土) 01:42:060376デフォルトの名無しさん
2007/11/03(土) 02:47:50悔しいのはわかるがそんな短絡的なことでどうする?
0377375
2007/11/03(土) 02:56:53また無差別認定か
前々から同じこと書いてるだろに
馬鹿なやつだな
自分から心に余裕のないのを晒してどうするのさ
ま、それは置いてとにかく1文字変数はやめろ
コーディング規約を考えていない
それがVBA系にゴロゴロいる駄目なやつの共通点だ
0378デフォルトの名無しさん
2007/11/03(土) 03:00:09うごけばいい
規約なんて勉強しなくても
うごけばいい
0379デフォルトの名無しさん
2007/11/03(土) 03:04:530380デフォルトの名無しさん
2007/11/03(土) 03:11:00なんの脈略もなく一文字変数はだめだって
それだけって単なるあほだろ
0381デフォルトの名無しさん
2007/11/03(土) 05:47:010382デフォルトの名無しさん
2007/11/03(土) 07:35:520383デフォルトの名無しさん
2007/11/03(土) 08:07:54定義しないでVariantで頻繁に使われてるとさらに困難
0384デフォルトの名無しさん
2007/11/03(土) 08:51:37ループ変数でも、
実際にはループ自体に添字とか何らかの意味はあるはずだから
そちらを使うほうが分かりやすい。
For文内で汎用ループ変数として使うのはさほど問題ない気もするが
最近はExcelでもIntegerで足りない事が結構ある。とはいえ
Dim i as Long は駄目だな。あくまでInteger限定。
「i」にも、「ただのループ変数だよ。使い捨てだから後から参照しないよ」
程度の暗黙の了解はあるけれど、
型と同様、通じない人(というか無視して組む人)もいるのでお薦めはしない。
0385デフォルトの名無しさん
2007/11/03(土) 08:52:48それっぽっちのことで断念するのかよ
全然問題にもならないと思うが
0386デフォルトの名無しさん
2007/11/03(土) 13:17:42それ考えると、UNIXのシェルスクリプトは医大だよな。
ifの終りはendifじゃなくてfiだよ。
0387デフォルトの名無しさん
2007/11/03(土) 14:52:09UNIX のシェルスクリプトといえば
[ と ] が演算子だと知ったときに感動しました
0388デフォルトの名無しさん
2007/11/03(土) 14:52:57演算子じゃなくてコマンドだよ
0389デフォルトの名無しさん
2007/11/03(土) 15:18:11どうやって回避するの?
Columns("A:C")って記法は固定みたいなんだけど
0390デフォルトの名無しさん
2007/11/03(土) 15:28:540391デフォルトの名無しさん
2007/11/03(土) 15:40:41n列おきにセル幅を設定するって部分があって
chrでASCIIコードに増分与えようかと思ったけど、可読性が極度に落ちるのと、
どうせ再利用する機会が多いんで、結局10進to26進関数を組んで回避したことがあったんだ
0392デフォルトの名無しさん
2007/11/03(土) 17:58:020393デフォルトの名無しさん
2007/11/03(土) 18:00:52↓
Dim r As Range
Set r = Union(Columns(1), Columns(2), Columns(3))
r.Hogehoge()
だそうな
0394デフォルトの名無しさん
2007/11/03(土) 18:07:50Dim r As Range
Dim i As Integer
Set r = Columns(2)
For i = 5 To 14 Step 3
Set r = Union(r, Columns(i))
Next
r.Select
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
0396デフォルトの名無しさん
2007/11/03(土) 18:15:31勉強になった
サンクス!
0397デフォルトの名無しさん
2007/11/03(土) 18:23:30こんなんあったのか
Dim I As Integer
For I = 1 To Rng.Areas.Count
Rng.Areas(I).Value = I
Next I
なんか便利そう
0398デフォルトの名無しさん
2007/11/03(土) 18:27:464列おきに2列の操作するとか
With ThisWorkBook.Worksheet(1)
For intClm=1 To 16 Step 4
Set rngBuf = .range(.cells(1,intClm),.cells(65536,intClm+1))
'(処理を記述)
Set rngBuf=Nothing
Next
End With
0399デフォルトの名無しさん
2007/11/03(土) 18:37:06Sub hoge()
Dim r As Range
Dim i, j, k As Integer
k = 0
For i = 2 To 8 Step 2
For j = 3 To 9 Step 3
If k = 0 Then
Set r = Cells(i, j)
k = 1
Else
Set r = Union(r, Cells(i, j))
End If
Next
Next
r.Select
For i = 1 To r.Areas.Count
For j = 1 To r.Areas(i).Areas.Count
r.Areas(i).Areas(j).Value = CLng(i - 1) * r.Areas(i).Areas.Count + CLng(j - 1)
Next
Next
End Sub
0400デフォルトの名無しさん
2007/11/03(土) 18:39:300401デフォルトの名無しさん
2007/11/06(火) 14:12:24Bookを開かずに書き込む方法がわかりません。
何かヒントでもあればよろしくお願いします。
0402デフォルトの名無しさん
2007/11/06(火) 14:32:32「開かずにできた」というのは、気のせいじゃないか?
0403デフォルトの名無しさん
2007/11/06(火) 14:48:06タスクバーには表示されなかったんだけどなあ・・・
0404デフォルトの名無しさん
2007/11/06(火) 14:54:51どうやってやったんでしょう?教えてください。
0405デフォルトの名無しさん
2007/11/06(火) 15:06:02ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R1C1")
これでBook1のSheet1でA1の値を取得できているようです。
裏技とか書いてました。
0406デフォルトの名無しさん
2007/11/06(火) 15:15:23ファイルの中にExcelを2つ用意して、1つにプログラム。
もう1つをBook1としてSheet1のA1に何か書いときます。
で、Book1は開かずにプログラムを書いた方だけ開いて、
ユーザーフォームのラベルに表示させました。
0407デフォルトの名無しさん
2007/11/06(火) 15:23:130408デフォルトの名無しさん
2007/11/06(火) 17:05:41参照先でどうやっても参照元は変えられないでしょ
超ウラワザがあるかもしれんが結局裏でADO操作してとかだから
それならADOでやればいい
そんな都合のいいお手軽な方法はないよ
0409デフォルトの名無しさん
2007/11/06(火) 17:28:23ありがとうございます。
当方初心者でADOが何かすらもわかりません。
もう一度勉強します。
ありがとうございました。
0410デフォルトの名無しさん
2007/11/06(火) 18:11:52"開かずに"は不可能
ExecuteExcel4Macroも"開かずに"ではなく"表示せずに"だし
裏技でもなんでもない
0411デフォルトの名無しさん
2007/11/06(火) 18:12:410412デフォルトの名無しさん
2007/11/06(火) 22:18:18Set s = ActiveSheet.Shapes("Button 1")
s.Select
Selection.Characters.Text = "hogehoge"
とすれば書き換わりますが、ボタンがセレクトされるのがイヤなので
s.Characters.Text = "hogehoge"
としたら、「オブジェクトは、このプロパティまたはメソッドをサポートしていません」
と怒られました。セレクトせずにテキストを書き換えるにはどうしたらいいですか?
0413デフォルトの名無しさん
2007/11/06(火) 22:50:060414デフォルトの名無しさん
2007/11/06(火) 22:52:520415412
2007/11/07(水) 00:00:59UserFormオブジェクトのプロパティCaptionを使えばいいようですが
UserFormオブジェクトはどうやって取得するのでしょうか?
0416デフォルトの名無しさん
2007/11/07(水) 00:12:36オブジェクトには名前が付いてるでしょ
0417デフォルトの名無しさん
2007/11/07(水) 00:35:50Dim s As Shape
Set s = ActiveSheet.Shapes("Button 1")
s.TextFrame.Characters.Text = "HELLO"
みたいよ
0418412
2007/11/07(水) 00:50:19ありがとうございました。解決できました。
selectしたら、textFrameを書かなくてもいいんですね。。。
0419デフォルトの名無しさん
2007/11/07(水) 03:15:530420デフォルトの名無しさん
2007/11/07(水) 06:23:010421デフォルトの名無しさん
2007/11/07(水) 13:57:320422デフォルトの名無しさん
2007/11/07(水) 15:42:24使い込んで慣れるよりも調べ方を覚えるほうが先
0423デフォルトの名無しさん
2007/11/07(水) 16:19:38その通りだね
VBAっていうよりも仕事をする上で必要な事かもね。
調査がうまい人ってその時々の対応に長けてるところがあるしね。
0424デフォルトの名無しさん
2007/11/07(水) 16:25:31昨日、bookを開かずに作業が不可能なのは理解できました。
ありがとうございました。
今日は、
『それなら、タスクバーに開いてるbookが表示されないように』
と言われて調べてますが、どうもよくわかりません。
よろしくお願いします。
0425デフォルトの名無しさん
2007/11/07(水) 16:34:07質問スレだからガンガン質問し続けるのは悪くはないが何をしようとしてるの?
あと、どうもよくわからないって何が分からないのかな?
質問の意図をちゃんと把握できていないと自分のためにならないよ。
聞かれた事を右から左に受け流すだけなら誰でも・・・
0426デフォルトの名無しさん
2007/11/07(水) 16:34:52Application.Visible = False
じゃないの?
実行するとExcelが見えなくなって操作不能になるから
注意してね。
0427デフォルトの名無しさん
2007/11/07(水) 16:44:43ユーザーフォームで作業をし、エクセルのbookをデータベースとして
使うシステムを作ってます。
タスクバーに作業中のbookが出てくるのはよろしくないということで
それを見えないようにという指示でした。
『何をどう書けばいいかわからない』って、甘えすぎですね。
すみません。
Application.Visible=False、やってみます。
ありがとうございます。
0428デフォルトの名無しさん
2007/11/07(水) 16:46:010429デフォルトの名無しさん
2007/11/07(水) 16:47:42天然の人みたいだから、もう細かい話はいいんじゃね?w
0430デフォルトの名無しさん
2007/11/07(水) 17:02:03早くレスした方が良いのかと思って。
Application.Visible = Falseで出来ました。
ありがとうございました。
0431デフォルトの名無しさん
2007/11/07(水) 17:29:36・ユーザーフォームで作業する。
・ブックをデータベースとして使う。
・タスクバーに作業中のブックが表示されないようにする。
ブックでデータ管理をしているように読めるのですが、
データってxmlとかで管理するものじゃないでしょうか?
ちょっと分からなかったのでどなたか助言をお願いします。
0432デフォルトの名無しさん
2007/11/07(水) 17:38:50ここはExcel VBAの断片的な質問のスレだろうから、
427タソが最終的に何をどうしたいのかっていう問題は、
どうでもよいと思いますが。
0433デフォルトの名無しさん
2007/11/07(水) 17:40:24まとめるXさん用ってパターンだってあるだろ
0434デフォルトの名無しさん
2007/11/07(水) 17:41:57断片的なのでどうしたいかとかは関係ありません。
427さんのやりたい事とか関係なしにデータ管理の仕方について教えて頂きたいです。
0435デフォルトの名無しさん
2007/11/07(水) 17:49:39データ管理?
そういう作業はExcelじゃなくてAccess
http://pc11.2ch.net/test/read.cgi/tech/1064900050/
0436デフォルトの名無しさん
2007/11/07(水) 18:22:340437デフォルトの名無しさん
2007/11/07(水) 20:46:15OSの違いを吸収できるのは利点だろうが
速度的に根本的に欠陥あるだろ
0438デフォルトの名無しさん
2007/11/07(水) 21:21:51ソース見てみたら、初心者入門サイトに載ってるような真っ当なコード書いてるので手直ししてやった
結果、1100%程度の速度アップ(同じ処理が11分の1の時間で終了)に成功した
遅い、ダメだ、と文句だけ言うのは簡単だが、バカとナントカは使いよう
xmlは汎用性重視な為、普通に使ってたのでは限定用途では利点が活きにくい
しかし使い方次第では限定用途特化型のものを超えることはなくても、
実用に充分なパフォーマンスを発揮することも可能な場合が多い
まぁxmlの使い方というよりは頭の使い方の問題かもな
0439デフォルトの名無しさん
2007/11/07(水) 21:44:54笑わせたいの?
0440デフォルトの名無しさん
2007/11/07(水) 22:01:080441デフォルトの名無しさん
2007/11/07(水) 22:23:12xmlって使われてるの設定ファイルぐらいだよね
いい使い方おちえて?
0442デフォルトの名無しさん
2007/11/07(水) 22:25:03設定ファイルどころでなくあちこちで使われている。
0443デフォルトの名無しさん
2007/11/07(水) 22:42:080444デフォルトの名無しさん
2007/11/07(水) 23:05:39<hoge>
<fuga>fuga</fuga>
hoge
</hoge>
0445デフォルトの名無しさん
2007/11/07(水) 23:07:53という需要があった。そのためには「型名」と「値」を文字列で書いちゃえば
いいんだけれど、昔のコンピュータはいまほど処理速度もメモリもなくて
利用されることはあまりなかった。
90年代から、コンピュータの性能が向上してきて文字で書いても大丈夫になってきた。
そのころ「データ交換するときにXML使えばいいんじゃね?文字コードの扱いも整理されているし」と
考えた人たちがいて、使ってみたら便利だったんで今みたいに使われるようになった。
元々XMLは、SGMLの進化版だから「形式的な文章」を表記するための規格。
データ交換のために考えられたものではない。が、データ交換によく
利用されている。
というわけで、1台のPCで完結するようなシステムでは
XMLの出番はあまりない。設定ファイルの記述にXMLが利用されている理由は、
オブジェクトのシリアライズデータを人が読んだりテキストエディタで編集したり
したいからだと思われ。
0446デフォルトの名無しさん
2007/11/07(水) 23:13:220447デフォルトの名無しさん
2007/11/08(木) 02:24:150448デフォルトの名無しさん
2007/11/08(木) 08:59:41自己紹介?
0449デフォルトの名無しさん
2007/11/08(木) 14:59:18作成したのですが、なぜか特定のCSVファイルだけ、先頭の2行を1行分にして抽出してきてしまいます。
"1行目 2行目"
のような感じです。
何が原因でどう対処すればいいか困っています。だれ偉い人教えてください!
Public Function ReadOneLine() As String
Dim Fso As Object
Dim Tso As Object
Dim line As String
Set Fso = CreateObject("Scripting.FileSystemObject")
'ファイル名を指定する
Set Tso = Fso.OpenTextFile(FileName:=m_strInputFile, IOMode:=1)
With Tso
'ファイルポインタが終端になければ(空ファイルでなければ)
If .AtEndOfStream <> True Then
line = Tso.ReadLine
Debug.Print line
End If
.Close
End With
'オブジェクトの解放
Set Tso = Nothing
Set Fso = Nothing
ReadOneLine = line
End Function
ちなみにCSVファイルの文字コードはShift-JISで改行コードはCR+LFです。
0450デフォルトの名無しさん
2007/11/08(木) 15:14:31特定のCSVファイルって?
0451デフォルトの名無しさん
2007/11/08(木) 15:41:07知人からサンプルでもらった5つのCSVファイルの中の1個だけ、
上記の症状になってしまうんです。
秀丸エディタでそのCSVファイルを開いて
文字コードや改行コード、コンマの数や""の有無を確認したのですが、
他のCSVファイルと特に変わったところが無いのです。
0453デフォルトの名無しさん
2007/11/08(木) 15:53:350454デフォルトの名無しさん
2007/11/08(木) 16:08:17困ったねー
その症状がどういうときに発生するかつかめれば打開できるんだろうね
>>449なら何か打開できそうな気がするけどな・・・
0455デフォルトの名無しさん
2007/11/08(木) 16:13:350456デフォルトの名無しさん
2007/11/08(木) 16:17:440457デフォルトの名無しさん
2007/11/08(木) 16:21:07予想外の動きしてるときほど見落とすもんなぁ
症状からして普通にありそだな
0458デフォルトの名無しさん
2007/11/08(木) 16:21:550459デフォルトの名無しさん
2007/11/08(木) 16:33:16FAQだと思うんだがExcelのセルの中で改行されていると
CSVで出したときそこにLFだけが入るから
別のプログラムでそれを読み込むと2行(以上)に
なっているように見えることがあるし
LFを正しく処理していない場合は1行に2行分はいることになる
0460デフォルトの名無しさん
2007/11/08(木) 16:53:51FileSystemObject.ReadLineはCR+LFだけではなく、LFのみでも改行とみなして一行読み込む。
(ただし、CRのみの場合は改行とはみなさない。)
やはり、バイナリエディタできちんと改行コードがあるかどうかを確認するのが先決だね。
0461デフォルトの名無しさん
2007/11/08(木) 18:24:320462デフォルトの名無しさん
2007/11/08(木) 18:39:12EXCEL 2000
shellでリモートデスクトップを呼び出す所までは、
自分で調べて理解出来たのですが、
呼び出したリモートデスクトップに値を投入するやり方がわかりません。
どなたかご教授願います。
0463デフォルトの名無しさん
2007/11/08(木) 18:44:37すいませんが、意味不明です
0464462
2007/11/08(木) 18:49:39申し訳ございません、プログラミングをする事が初めてなので…
リモートデスクトップを呼び出してそこに
サーバ名等を投入し接続ボタンまで自動的に押すマクロが組みたいのです。
0465デフォルトの名無しさん
2007/11/08(木) 19:11:40Excelからウィンドウズのリモートデスクトップ接続を起動して別PCに接続したいのかな?
>>shellでリモートデスクトップを呼び出す所までは、自分で調べて理解出来た
もしそうだったらここ参考になるかな?
http://www.atmarkit.co.jp/fwin2k/win2ktips/519rdcons/rdcons.html
打開できたらどうやったか書き込んでねー。
0467デフォルトの名無しさん
2007/11/08(木) 20:33:560468デフォルトの名無しさん
2007/11/08(木) 20:39:51ウにデータを送ります。
特殊キーを送る場合は、次のとおり。
{ENTER} Enter キー
{ESCAPE}, {ESC} Esc キー
{TAB} Tab キー
{INSERT} Insert キー
{DELETE}, {DEL} Delete キー
{BACKSPACE}, {BS}, {BKSP} Back space キー
{LEFT} ← キー
{RIGHT} → キー
{UP} ↑ キー
{DOWN} ↓ キー
{PGUP} Page Up キー
{PGDN} Page Down キー
{HOME} Home キー
{END} End キー
{PRTSC} Print Screen キー
{SCROLLLOCK} Scroll Lock キー
{BREAK} Pause キー
{NUMLOCK} Num Lock キー
{CAPSLOCK} Caps Lock キー
{F1} 〜 {F12} F1 〜 F12 キー (ファンクションキー)
+ Shift キー
^ Ctrl キー
% Alt キー
** +, ^, % で、複数のキーを対象にする場合は、() でキーを囲む。
+(AB) は、シフトキーを押しながらの AB になります。
** 画面コピーとしての {PRTSC} を sendkeys することはできない。
Windows API などを使用して対処するしかない。
** 同じキーをリピートするには、{RIGHT 6} とすると → が 6 度押された
動作になる。
0469デフォルトの名無しさん
2007/11/08(木) 20:44:28EXCEL VBAでもできるけど、厳密に言うとスレ違い
そういうのはWSHからSHELLオブジェクトで処理するのが普通
ただMSTSCコマンドにはパスワード指定オプションがないみたいなので、
その辺りはSendkeysでキーを送ってやるなりする必要がある
繰り返すけどEXCELでやる必然性は全くないので
0470462
2007/11/08(木) 22:28:25>>468
本当にありがとうございます。
まだまだ自分の勉強が足りませんでした。
>>469
WSHというのは調べてみるとVBS…ですかね?
エクセルで機能の一覧表があってその横にボタン作ってウマー
なんて考えていたんですが。
ありがとうございました、勉強してみます。
0471デフォルトの名無しさん
2007/11/08(木) 23:00:24a^2をきちんと表示したいんですが。
0472デフォルトの名無しさん
2007/11/08(木) 23:24:34Excelからスクリプトを引数付きで呼べばいい
0473デフォルトの名無しさん
2007/11/09(金) 11:27:51error_msg = MsgBox("error", vbOKCancel + vbInformation)
If error_msg = vbOK Then Exit Sub
End Sub
-----
この場合、「error_msg」の変数定義は何になるんですか
variantにしても「型が一致しません」と出てしまいます(;_;)
0474デフォルトの名無しさん
2007/11/09(金) 11:34:520475デフォルトの名無しさん
2007/11/09(金) 11:37:06VBAのエディタ上でMsgBoxの上にキャレットを置いてF1キーを押す
0476473
2007/11/09(金) 12:13:36いけました
if total_value <> 0 and total_value <> "" then
の場合、total_valueの変数定義はvariantにするしかないんでしょうか。
こちらではstringでもいけるようなんですが、ということはstringは整数を内包している?
0477449
2007/11/09(金) 12:16:46その先頭行だけCRでした。ショック。。(他の行はCR+LF)
とりあえずCRも改行コードとして認識できる方法を探してみようと思います。
>>461
私の経験からADOを利用したCSVファイルの先頭行の読み出し方法は
レコードセットのFieldsオブジェクトを参照する方法しか思い浮かばないのですが
他にも良い方法がありますか?
0478デフォルトの名無しさん
2007/11/09(金) 12:36:14それ普通にIntegerかDoubleで受ければいい
空白は0になる
関係ないけど変数定義じゃなくて型と呼んでくれ
0479デフォルトの名無しさん
2007/11/09(金) 13:41:20ありがとうございます
0480デフォルトの名無しさん
2007/11/09(金) 16:06:09ユーザーフォームのリストボックスに表示されている値を
新しいシートに入れたいのですが。
リストボックスの値の元になっているシート上のデータは使えません。
チェックされているかどうかに関係なく、表示されている値全てをそれぞれセルに入れたいのです。
どなたかよろしくお願いします。
0481デフォルトの名無しさん
2007/11/09(金) 16:19:08.Range(.Cells(1, 1), .Cells(UserForm1.ListBox1.ListCount, 1)).Value = UserForm1.ListBox1.List
End With
0482デフォルトの名無しさん
2007/11/09(金) 16:22:37For i = 0 To UserForm1.ListBox1.ListCount - 1
Worksheets("Sheet1").Range("A1").Offset(i, 0).Value = UserForm1.ListBox1.List(i)
Next
0483デフォルトの名無しさん
2007/11/09(金) 16:34:44本当にありがとうございます。
希望通りに出来ました。
0484デフォルトの名無しさん
2007/11/09(金) 19:13:23なんでレコードセットが出てくるんだよ
ストリームだストリーム
0485477
2007/11/09(金) 21:32:11なるほど。ちょいリファレンス読みながらやってみます。
0486477
2007/11/10(土) 11:57:28作ったサンプルになります。
'改行コードがCRのデータ抽出
Sub StermTest()
Dim stm As ADODB.Stream
Dim strFile As String
Dim line As String
Set stm = New ADODB.Stream
strFile = "hoge.csv"
stm.Type = adTypeText 'ストリーム内のデータ型を設定する
stm.Charset = "Shift_JIS" '読み取り時の変換文字コードを設定する
stm.LineSeparator = 13 'CR=13 改行コードを設定する
stm.Open
'Streamオブジェクトにファイル内容を読み込む
stm.LoadFromFile strFile
'1行目を抽出する
line = stm.ReadText(-2)
Debug.Print line
stm.Close
'オブジェクト解放
Set stm = Nothing
End Sub
>>484
こんな感じですよね?
0487デフォルトの名無しさん
2007/11/10(土) 19:35:46>こんな感じですよね?
yes(^ω^)b
0488デフォルトの名無しさん
2007/11/12(月) 14:42:07ユーザーフォーム上に多数のテキストボックスやコンボボックスがあります。
クリアボタンを押す時に
「編集中の内容は破棄されます」とメッセージで出すのですが、
保存ボタンを押しているのであればこのメッセージは出しません。
If combobox1.value=worksheets("sheet1").cells(2,2)(保存ボタンでこのセルに入力されます).value Then
Else
If MsgBox ("編集中〜破棄されます",vbOkCancel) =vbCancel Then
Exit Sub
End If
End If
この考え方でよろしいのでしょうか?
試してみると、両方ともに同じ数値が入っていてもメッセージボックスが立ち上がってしまいます。
0489デフォルトの名無しさん
2007/11/12(月) 15:24:590490デフォルトの名無しさん
2007/11/12(月) 15:25:25> この考え方でよろしいのでしょうか?
いい。
If分にbreak pointを設定して、止まったらイミディエイトで「?worksheets("sheet1").cells(2,2).value」、
「?combobox1.value」として内容を確認してみるべし。
0491デフォルトの名無しさん
2007/11/12(月) 15:30:250492488
2007/11/12(月) 17:24:42やってみようと思った矢先、違う項目について言われたので
そちらに時間をとられてます。
考え方が間違ってなかったとわかり、心強いです。
0493デフォルトの名無しさん
2007/11/12(月) 21:41:20メインのsubから、複数受けて、1個の値を返すというのは、わかったのですが、
3つの値を受けて、5つの値を返す、functionもしくはsubを作りたいのですが可能でしょうか?
その場合の記述方法を教えていただきたいのです。お願いします。
0494デフォルトの名無しさん
2007/11/12(月) 21:45:34a = 1
b = 2
c = 3
d = 4
e = 5
end sub
0495デフォルトの名無しさん
2007/11/12(月) 21:46:19返す5つの値をひとまとめにしたクラスを作ってそのオブジェクトを返す
0497494
2007/11/12(月) 21:49:36ありがとうございます。
classというのがあるのですねw
独学のため、知りませんでした。勉強してみます!
0498494
2007/11/12(月) 21:53:04ちょっと調べてみます。
ありがとうございます。
0499494
2007/11/12(月) 22:02:47これじゃ、だめなのはわかってるのですが乗せますw
こんな感じの事がしたいんです。
Sub TEST()
Dim a, b, c, z
a = 1
b = 2
c = 3
Call TEST2(a, b, c) ←ここで、Test2にa,b,cを入れて、Test2のd,e,f,g,hの値を取得したい
z = d + e + f + g + h←取得したd,e,f,g,hを使って計算したい。
End Sub
Sub TEST2(d, e, f, g, h)
Dim d, e, f, g, h
d = a * 2
e = b * 3
f = c * 4
g = a * b
h = a * c
End Sub
0500デフォルトの名無しさん
2007/11/12(月) 22:05:030501デフォルトの名無しさん
2007/11/12(月) 22:17:23Sub TEST()
Dim a, b, c, z, d, e, f, g, h
a = 1
b = 2
c = 3
Call TEST2(a, b, c, d, e, f, g, h)
z = d + e + f + g + h
MsgBox (z)
End Sub
Sub TEST2(ByVal a, ByVal b, ByVal c, ByRef d, ByRef e, ByRef f, ByRef g, ByRef h)
'略(一緒)
End Sub
d, e, f, g, hの組み合わせに何か意味があるんだったら、
ユーザー定義型を使ったほうが見やすくなる
0502494
2007/11/12(月) 22:18:01なるほど!できました!
3個いれて5個入れたいなら、最初から8個にしとけって事ですねw
このやり方って、当たり前なんですかね〜。自分の頭の固さにがっかりですわw
ありがとうございました。
0503デフォルトの名無しさん
2007/11/13(火) 00:36:21当たり前ではない
見づらいコードなだけでメリットがない
誰かが書いていた通りクラスか構造体を使うか、戻り値を配列で返却するのが普通
0504デフォルトの名無しさん
2007/11/13(火) 00:48:090505494
2007/11/13(火) 08:55:56ありがとうございます。
昨日はじめたばかりで、配列・クラス・構造体を知らないんですw
勉強して、すっきりさせたいと思います。
0506デフォルトの名無しさん
2007/11/13(火) 14:37:54プログラミングは困難だね
がんばってね
0507デフォルトの名無しさん
2007/11/13(火) 18:47:42出力引数を使うんだったらByVal/ByRefはサボらず書くように
0508デフォルトの名無しさん
2007/11/13(火) 23:22:28SUM関数を呼び出す場合などのように引数のツールチップを表示させる方法がわかりません。
0509デフォルトの名無しさん
2007/11/14(水) 02:14:050510488
2007/11/14(水) 09:19:31If combobox1.value = worksheets("sheet1").cells(2,2).value And _
combobox2.value = worksheets("sheet1").cells(2,3).value And _
textbox1.text = worksheets("sheet1").cells(2,4).value Then
Userform.show
Else
Msgbox "〜"
End If
イミディエイト
?worksheets("sheet1").cells(2,2).value
19(19の前に半角の空白があきます)
?combobox1.value
19
このようになり、同じ数値がそれぞれ入っているのにメッセージボックスが開いてしまいます。
Andの使い方が悪いのでしょうか?
それともイミディエイトの表示のように半角の空白があるのが悪いのでしょうか?
よろしくお願いします。
0511デフォルトの名無しさん
2007/11/14(水) 09:37:30空白が悪い。
0512488
2007/11/14(水) 09:52:31ありがとうございます。
0513デフォルトの名無しさん
2007/11/14(水) 09:56:40>>combobox1.value = worksheets("sheet1").cells(2,2).value And _
>>combobox2.value = worksheets("sheet1").cells(2,3).value And _
>>textbox1.text = worksheets("sheet1").cells(2,4).value
こいつを満たしてないからメッセージボックスが出ます。
0514488
2007/11/14(水) 10:25:19ありがとうございます。
条件を満たしていない理由を知りたかったのです。
どうやら型が違ったようです。
0515デフォルトの名無しさん
2007/11/14(水) 10:26:15こういう感じで、A1セルに関数を入れるとき、関数の途中でアンダーバーによる改行
を行うことは可能ですか?
改行を入れると必ず次の行で、「修正候補:ステートメントの最後」が出てしまいます。
0516デフォルトの名無しさん
2007/11/14(水) 15:44:25e.g)
strBuf=IF(ISERROR(
strBuf=strBuf & "VLOOKUP(H5,Table!$A$1,FALSE)"
strBuf=strBuf & "),"hoge","fuge")
ってな感じで
0517デフォルトの名無しさん
2007/11/14(水) 15:47:070518515
2007/11/14(水) 18:34:20自己レスでおま。
以下のようにするといけました・・・。
IF(ISERROR(VLOOKUP _
& "(H5,テーブル!$A$50:$B$97
0519デフォルトの名無しさん
2007/11/14(水) 21:43:58Cells(1,1).Value = "(" & a & ")"
とすると、a=100とすると、(100)とでると思ったのですが、-100と出ました。
これは、文法が間違っているのでしょうか?
0520デフォルトの名無しさん
2007/11/14(水) 21:54:09書式設定でも負の値の表現に括弧で括る表記が選べるのを見たことがあるだろう。
一番手っ取り早い対処法は、おそらく"'(" & a & ")"のようにアポストロフィを頭に置くこと。
ほか正攻法があると思うが、やったことないので詳しくは知らない。
0521デフォルトの名無しさん
2007/11/14(水) 21:57:45ありがとうございました!できました。
確かに、書式設定で見ると()もありますね。
0522デフォルトの名無しさん
2007/11/15(木) 20:26:50FileSystemObjectを使ってGetFolderでネットワークのパスを取得すると
\・・・\ のような文字化けを起こすのですが、どのように回避すればよいのでしょうか?
0523デフォルトの名無しさん
2007/11/15(木) 21:06:330524デフォルトの名無しさん
2007/11/15(木) 21:40:36プログラムを教えて欲しいのですが、
Excelで入力されているIPアドレスを
頭以外、全て三桁で表すようにするにはどうすればいいのでしょうか?
例えば、
99.1.2.3 → 99.001.002.003
という風に変換したいです。
0525デフォルトの名無しさん
2007/11/15(木) 22:04:15Excel関数の質問はスレ違い
Excel総合相談所 61
http://pc11.2ch.net/test/read.cgi/bsoft/1192713147/
ついでに、
(1)IPアドレスの入っている列を . で区切って4列にする。区切るには「データ(D)→区切り位置(E)」を使う
(2)4列の各々の値を =text(a1, "000")&"."&text(b1, "000")&"."&text(c1, "000")&"."&text(d1, "000")&"."のような式で、ゼロを補って出力する
でOKなはず
0527デフォルトの名無しさん
2007/11/16(金) 10:16:270528デフォルトの名無しさん
2007/11/16(金) 11:07:16XXX = workbooks("book1").worksheets("sheet1").cells(1,1).value
※cell(1,1)に表示したい文
MsgBox XXX
間違ってる?
0529デフォルトの名無しさん
2007/11/16(金) 11:20:14ありがとうございます
get_value = MsgBox("計算が終了しました", vbOKOnly + vbInformation, "給与合算")
上記の「給与合算」にあたる部分ですね・・・。
0530デフォルトの名無しさん
2007/11/16(金) 11:57:11とかじゃ駄目なのか?
0531デフォルトの名無しさん
2007/11/16(金) 12:09:59なるほど、その手がありましたか
ところで関係ないですが、文字列を「hoge」「huge」にするのって、
何か意味があるんですか。
0532デフォルトの名無しさん
2007/11/16(金) 12:15:10また、力を貸していただきたいです。
SA-2 1 s5004878815 8635A129
2 s5004878811
3 s5004879056
4 s5004879819
5 s5004879066
:
:
このように列が並んでいて、一行ごとに20行列を挿入させたいです。
ネットで関連サイトからコピペしてみましたが、1度マグレでできましたが
もうできません。
ここにいる方達にとっては、簡単すぎるのかも知れませんが
私にはわかりません。
よろしくお願いします。
0533デフォルトの名無しさん
2007/11/16(金) 12:49:10行と列は別物だ
0534デフォルトの名無しさん
2007/11/16(金) 12:55:37>>ネットで関連サイトからコピペしてみました
このコピペしたロジックの処理はちゃんと理解できてるの?
もし理解できているならどこがおかしいか?むことができると思うけど・・・
>>533 の件は同意w
0535デフォルトの名無しさん
2007/11/16(金) 12:59:27使われる文字だよ
>>530 の場合はメッセージBOXに"hoge"と表示される
0536532
2007/11/16(金) 13:02:59今一行ずつ地道に挿入し続けています。指が痛くなってきました笑
列と行間違えてますね、ごめんなさい。
ロジックもほとんどわからないです。
ごめんなさい。
0537デフォルトの名無しさん
2007/11/16(金) 14:29:58Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
End Sub
0538デフォルトの名無しさん
2007/11/16(金) 14:54:12それに対してどういうマクロを動かしてどうダメだったのか
自分で理解する気がないならそもそもスレ違い
0539デフォルトの名無しさん
2007/11/16(金) 15:10:22紙にフローチャートでも書いてみると理解しやすいかもわからん。
0540デフォルトの名無しさん
2007/11/16(金) 16:04:54隣の列に連番を振って下に同じ連番をコピー
A B
1 aaa 1
2 bbb 2
3 ccc 3
4 ddd 4
5 1
6 2
7 3
8 4
B列で並べ替え
0541デフォルトの名無しさん
2007/11/16(金) 16:05:40何とか理解してくれ
0542532
2007/11/16(金) 16:13:03537様のをボタンをつくりました。
ありがとうございました。
理解しようと本などを読んだりしていますが、難しいです。
みなさまどのように学んで、自分で作れるようになったのでしょうか。
すごすぎです。
だめだったのは、テンプレが6行ごとに1行空白行を挿入で
私が数字を変えたため、できなくなったと思います。
0543デフォルトの名無しさん
2007/11/16(金) 16:24:05とりあえず解決(?)したようでよかったね。
>>理解しようと本などを読んだりしていますが、難しいです。
それは多分ただ眺めたって感じなのかも・・・
とりあえず例題などを実際に入力してフローを理解する必要が最低でもあると思います。
これができればどっかでつまづいた場合でもネットで調べるなり自力で応用力がつくと思いますよ。
>>だめだったのは、テンプレが6行ごとに1行空白行を挿入で
>>私が数字を変えたため、できなくなったと思います。
この説明じゃ相談されても困るよね・・・
相談の仕方も勉強の一つです。頑張って下さいね!
0544537
2007/11/16(金) 16:24:16いつもクレクレ君の俺が役に・・・(T-T)
0545デフォルトの名無しさん
2007/11/16(金) 16:25:23やったじゃんwww
0546デフォルトの名無しさん
2007/11/16(金) 16:27:21この板では先に他のが使えた人が多いんじゃないの
0547デフォルトの名無しさん
2007/11/16(金) 21:08:42そこから読解できるだろ?
0548デフォルトの名無しさん
2007/11/16(金) 21:14:040549デフォルトの名無しさん
2007/11/16(金) 21:20:07っつーかExcelVBAの本読んでるんだから、
読んで手を動かして理解することくらいできるんじゃないのかなぁ・・・
もちろんマクロを記憶させて読解するのもありだよ。
条件として分からない時確認する本やサイトがある事ね。
0550デフォルトの名無しさん
2007/11/16(金) 21:20:39だったw
0551デフォルトの名無しさん
2007/11/16(金) 23:18:41VBAはクソ遅いんで、C++で自作のdllを組み込んでやろうと思うのですが、
ぐぐっても有益な情報は得られませんでした。
分かりやすく解説したホームページなどありませんでしょうか?
0552デフォルトの名無しさん
2007/11/16(金) 23:21:11ちなみにCPUはPEN2、360mhz、メモリ192mb・・・・
0553デフォルトの名無しさん
2007/11/16(金) 23:22:02スレ違いな上に 下げ って何だよ?
0554デフォルトの名無しさん
2007/11/16(金) 23:24:330555デフォルトの名無しさん
2007/11/16(金) 23:29:07これでも下がると思ったが、下がってませんでした?すいません。
>>554
?????
0556デフォルトの名無しさん
2007/11/17(土) 00:00:48DLL呼ぶ方法なんていたってポピュラーだし
VBA用に特殊なことしてるわけでもないし
0557デフォルトの名無しさん
2007/11/17(土) 03:26:26ネイティブよりVBAのが遅いのは確かだが、たかだか数万件のデータで
クソ遅いなんて思うほどなら、お前の技術不足と言わざるをえない
0558デフォルトの名無しさん
2007/11/17(土) 05:52:53どんなことやってるんだ?
VBAでも数万件くらい普通サクサクだぞ?
0559デフォルトの名無しさん
2007/11/17(土) 08:42:220560デフォルトの名無しさん
2007/11/17(土) 11:16:07stacallな関数をexportしたdllを作って、vbaでdeclare sub/functionすればいい。
知らない単語はググれ。
0561デフォルトの名無しさん
2007/11/17(土) 11:27:44T5500+Excell 2007で、次のコードが2.5秒くらいかかるし。
For i = 1 To 10000
Cells(i, 1).Value = Rnd()
Cells(i, 2).Value = Cells(i, 1).Value
Next
やりたい内容と、いまどれくらいかかてるか、どれくらいにしたいかを書いたほうがいいな。
C/C++にしたから、なんでも自動的に劇的に速くなるわけじゃないぞ。
意外とVBAって速いんだぞ。
0562デフォルトの名無しさん
2007/11/17(土) 11:31:42それでも遅いっちゃ遅いな。
0563デフォルトの名無しさん
2007/11/17(土) 12:26:18Dim buf(9999, 1) As Variant
For i = 0 To 10000 - 1
buf(i, 0) = Rnd()
buf(i, 1) = buf(i, 0)
Next
Range("A1:B10000") = buf
0564デフォルトの名無しさん
2007/11/17(土) 12:45:14便乗で聞いちゃうけれど、
装飾情報(フォント、セルの色など)を高速に書き込む方法ってのは
あるの?
0565デフォルトの名無しさん
2007/11/17(土) 12:50:45いや、そういうことが言いたかったわけじゃないんだけどね・・・
0566551
2007/11/17(土) 13:05:19やってることは、バイナリファイル(構造化されたデータ)を開いて、
項目ごとに対応する日本語に置き換えて、セルに放り込んで表示、
という物です。
データ数は4万ぐらいです。1つのデータについて項目の個数は50個ぐらいですね。
0567デフォルトの名無しさん
2007/11/17(土) 13:40:09よくわからんがこんなことですか?
With Range("A1:B10000")
.Font.Size = 12
.Font.ColorIndex = 3
.Interior.ColorIndex = 4
.Borders.ColorIndex = 3
End With
0568デフォルトの名無しさん
2007/11/17(土) 14:17:18DLL呼ぶって言ってるんだから
単純なデータ操作じゃなくて、時間のかかる数値計算でもやるんじゃね
0569デフォルトの名無しさん
2007/11/17(土) 14:22:47>>568の言うとおり。
そうだろねーじゃなきゃ>>551で『VBAはクソ遅い』なんて言えないもんね。
0570デフォルトの名無しさん
2007/11/17(土) 18:04:17Variantは使わない方がいいぞ
「セル範囲の値を取得する」変数はVariant型である必要があるが
「セル範囲に代入する値を一時格納する」配列変数はVariant型である必要は無い
これも件のTipsの一部なので覚えておくように
0571デフォルトの名無しさん
2007/11/17(土) 18:06:22ありそがちなのを挙げてみる
String型の連結を何度も使用している -> 固定長StringもしくはByte、Integerの配列を使え
読み込んだバイナリをForループでコピーしている -> RltMoveMemory
セルに1つづつ代入している -> String型の2次元配列を作って一気に代入
読み込んだ一時データを作業用シートに入れている -> 問題外
0573デフォルトの名無しさん
2007/11/17(土) 18:55:570574デフォルトの名無しさん
2007/11/17(土) 19:01:11さぁ…DLLばっか作ってたんじゃね?w
んでもってAPIは苦手で覚えもしなかったとかw
0575デフォルトの名無しさん
2007/11/17(土) 19:06:16ヘタにC++で書くより速いよ
0576デフォルトの名無しさん
2007/11/18(日) 10:07:48数値計算もね、意外とVBAでも速いんだよ
0577デフォルトの名無しさん
2007/11/18(日) 10:12:294万×50個のデータをセルに表示するってこと?だとすると、どうあがいても速くはならない。
それとも、「対応する日本語への置き換え」が遅いのか?だったら、今どうやってるか書いてみるべし。
何が遅いのかわからない?計測しろ、今すぐ。
0578577
2007/11/18(日) 10:15:43> 4万×50個のデータをセルに表示するってこと?だとすると、どうあがいても速くはならない。
これは、C/C++でDLLを作っても速くはならないってこと。念のため。
0579デフォルトの名無しさん
2007/11/18(日) 10:18:34> 読み込んだバイナリをForループでコピーしている -> RltMoveMemory
つLet
0580デフォルトの名無しさん
2007/11/18(日) 10:56:22まー、速いCPU使ったり、メモリ増設したりってのが劇的にスピードを速くする近道だったってな
こともあるかもしれないけど。
0581デフォルトの名無しさん
2007/11/18(日) 23:14:07ネットで検索すると出来ないと書いてあったんですが
本当は裏技があるとかんぐっています。
0582デフォルトの名無しさん
2007/11/18(日) 23:30:300583デフォルトの名無しさん
2007/11/18(日) 23:58:08Win32API使うといいよ
でもスレ違いだからあとは自分で調べてね
0584デフォルトの名無しさん
2007/11/19(月) 00:03:520585デフォルトの名無しさん
2007/11/19(月) 01:36:29各列のデータ型をschema.iniで定義できますが、
Excelのワークシートに接続する際には
どうやって定義すればいいんでしょうか??
0586デフォルトの名無しさん
2007/11/19(月) 06:01:38なにがどう普通なんだ?
0587デフォルトの名無しさん
2007/11/19(月) 07:54:01今携帯からなので、あとは自分で調べてみてくれ
0588デフォルトの名無しさん
2007/11/19(月) 10:25:49RltMoveMemoryとか書いちゃう奴がいるから、CopyMemoryを普通にしといたほうがいいんだよ
0589デフォルトの名無しさん
2007/11/19(月) 22:38:44だから何がどう普通なんだよw
0590デフォルトの名無しさん
2007/11/19(月) 23:45:57エクセル4.0マクロ(関数)ってOffice2007でもサポートされてますか?拡張子.xlsで。
昔作ったファイルがVistaで動作するかどうか知りたいのです。
MSのサイトで検索したところ、どうやら使えはするようなのですが、
買って実験しろ、ってのは最終手段でお願いします。
0591デフォルトの名無しさん
2007/11/19(月) 23:47:270592デフォルトの名無しさん
2007/11/20(火) 07:56:12CopyMemoryの方が直感的で間違わないだろ。
だからそれを普通にしといたほうがいいんだよ。
RltMoveMemoryとか書くアホでも使えるし。
0593デフォルトの名無しさん
2007/11/20(火) 08:55:51本来MoveMemoryな関数をCopyMemoryって本当に直観的か?
なんか無批判にAPIビューアの宣言を盲信してんだか、
自分がそれに慣れてるから勝手に直観的とか思い込んでるだけじゃね?w
0594デフォルトの名無しさん
2007/11/20(火) 09:43:470595デフォルトの名無しさん
2007/11/20(火) 09:47:000596デフォルトの名無しさん
2007/11/20(火) 10:08:12おまえ何がそんなに悔しいの?
0597585
2007/11/20(火) 10:11:46どなたか>>585もよろしくお願いします
0598デフォルトの名無しさん
2007/11/20(火) 10:43:42マクロの記録で、データ→外部データの取込み→テキストファイルのインポートでウィザードを操作してみれば大体分かる。
0599デフォルトの名無しさん
2007/11/20(火) 11:17:07RtlMoveMemoryとか書こうとするから恥かくんだよwww
0600デフォルトの名無しさん
2007/11/20(火) 11:53:05>>596
RtlMoveMemoryとか書こうとするから恥かくんだよwww
0601デフォルトの名無しさん
2007/11/20(火) 11:59:51なんだ、お前がいいたかったのは結局typoなのか
2ちゃん初心者なのかしらんが、んなことでいちいち粘着すんな、きめえ
0602デフォルトの名無しさん
2007/11/20(火) 14:25:21必死だな、お前
0603デフォルトの名無しさん
2007/11/20(火) 22:19:10二度と出てくんなよクズども>>601-602
>>597
君は以前にLFで悩んでた人かね
これ精読すれ
http://support.microsoft.com/kb/257819/ja/
これを読めばEXCELワークシートにはテーブル定義がないってのが分かるはず
じゃあどうするかって、答は書いてあるから好きに悩んでくれ
0604デフォルトの名無しさん
2007/11/20(火) 23:11:28Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
0605デフォルトの名無しさん
2007/11/21(水) 00:20:30これはどうすんだ?
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlCopyMemory" (Destination As Any, Source As Any, ByVal Length As Long)
0606デフォルトの名無しさん
2007/11/21(水) 00:33:300607デフォルトの名無しさん
2007/11/21(水) 00:46:00kernel32.dllを見てみろ。RtlCopyMemoryなんて存在しない。
0608デフォルトの名無しさん
2007/11/21(水) 00:52:32ほんとだ、なら604の案が無難だな
0609デフォルトの名無しさん
2007/11/21(水) 09:47:470610デフォルトの名無しさん
2007/11/21(水) 10:34:060611デフォルトの名無しさん
2007/11/21(水) 10:56:060612デフォルトの名無しさん
2007/11/21(水) 11:03:04>>571から数えて今日で5日目だぞ・・・
0613デフォルトの名無しさん
2007/11/21(水) 11:05:44「今月の末日の最終秒」は、たとえば今日だと2007/11/30 23:59:59です。
0614デフォルトの名無しさん
2007/11/21(水) 11:26:19来月の1日から1秒ひけばいい。
0615デフォルトの名無しさん
2007/11/21(水) 11:38:140616デフォルトの名無しさん
2007/11/21(水) 12:02:32もうほっとこーぜ。
0617デフォルトの名無しさん
2007/11/21(水) 13:05:30ありがとうございました。
感動しました。
0618デフォルトの名無しさん
2007/11/21(水) 13:20:34結合したセル自体を他の場所にペーストして、
結合セルを増やしたい。
簡単そうなのになんでできないんだorz
0619デフォルトの名無しさん
2007/11/21(水) 16:53:25普通にできるけど?
何がしたいんだ?
0620デフォルトの名無しさん
2007/11/22(木) 01:04:02WindowsXP
AppActivateの使い方がわかりません。
shellの所でタイトルの指定が出来ないです。
どなたかお教え下さい。
0621デフォルトの名無しさん
2007/11/22(木) 02:14:430622デフォルトの名無しさん
2007/11/22(木) 03:30:13それはすまんかった
0623デフォルトの名無しさん
2007/11/22(木) 15:29:59よhelp
>shellの所でタイトルの指定が出来ないです。
そのとおり。できない。よhelp
0624デフォルトの名無しさん
2007/11/23(金) 19:18:11VBAの文を実行する方法はないのでしょうか?
昔は出来たとか聞きましたが
0625デフォルトの名無しさん
2007/11/23(金) 21:40:000626デフォルトの名無しさん
2007/11/23(金) 22:05:31今でも出来るよ
0627デフォルトの名無しさん
2007/11/23(金) 22:28:460628デフォルトの名無しさん
2007/11/23(金) 22:34:37012,345を一つのセルに表示させようとして、
="0120,345"としても"0120,345"としても
元の通りに表示されません。
どうすればよいでしょうか?
0629デフォルトの名無しさん
2007/11/23(金) 22:42:31VBAの話だったら、CSVファイルの拡張子をtxtにいったん変えて、マクロを記録しながら
読み込むとどうすればいいかわかるかもよ。
0630デフォルトの名無しさん
2007/11/23(金) 22:45:26var oExcel = new ActiveXObject( "Excel.Application" );
var oWorkBook = oExcel.WorkBooks.Open("C:\\test.xls");
var oModule = oWorkBook.VBProject.VBComponents.Add(1);
var sCode = "sub VBAMacro()\r\n" +
" msgbox \"VBA Macro called\"\r\n" +
"end sub";
oModule.CodeModule.AddFromString(sCode);
oExcel.Run("VBAMacro");
C#のサンプルを参考にしたのでJScriptね
0631629
2007/11/23(金) 22:47:28普通に読めたけど。
カンマつき数値になるのがいやだってこと?
0633デフォルトの名無しさん
2007/11/23(金) 22:50:32import win32com.client
oExcel = win32com.client.Dispatch('Excel.Application')
oWorkBook = oExcel.WorkBooks.Open('C:/test.xls')
oModule = oWorkBook.VBProject.VBComponents.Add(1)
sCode = 'sub VBAMacro()\r\nmsgbox "VBA Macro called"\r\nend sub'
oModule.CodeModule.AddFromString(sCode)
oExcel.Run('VBAMacro')
Pythonね
0634デフォルトの名無しさん
2007/11/23(金) 22:58:280635デフォルトの名無しさん
2007/11/23(金) 22:59:260636628
2007/11/23(金) 23:14:050120,345が、120,345になるのでゼロサプレスされないようにしたいです。
で、,がそのままだと、区切り文字になってセルが変わってしまうので、
それも回避したいのです。
アドバイスありがとうございます。
ちょっとやってみます。
0637628
2007/11/23(金) 23:23:42CSV上は、"0123,456"で保存されていますが、
表示はやはり120,345になります。
セルを文字列形式にして、入力してみましたが
マクロの中身も打ったままになってます。
うーむ簡単なようで、難しいです…
0638デフォルトの名無しさん
2007/11/23(金) 23:25:330639628
2007/11/23(金) 23:53:01開いたときにウィザード形式で選んで開けるのですが、
マクロを記録した状態で、txtファイルを開くと、
マクロにはBook1!Macro1と表示されるだけで、実行できません。
根本的にやりかたを間違っているのかもしれません。
0640デフォルトの名無しさん
2007/11/23(金) 23:58:36自前でテキストファイル開いてセルに流し込んでる
0641デフォルトの名無しさん
2007/11/24(土) 00:02:04Yes→根本的にExcel Macroの使い方がわかってないから、これ以上俺からはアドバイスしない
No→やり方が間違ってる。できるはず。だけどやっぱり俺からはもうアドバイス無しね。
じゃ、がんばって。
0642デフォルトの名無しさん
2007/11/24(土) 00:04:47Excelのバージョン書かないと、やり方を教えようにも教えられないよ。
0643デフォルトの名無しさん
2007/11/24(土) 00:26:29DBの項目をCSV形式で出力したものを、
エクセルで開いているだけなので、
出力時にエクセルで開いた時とテキストで開いたときの表示が
同じようにするしかないかな〜と思っています。
>>641
セルには123,456と表示されました。
マクロ使うのは初めてです。
保存先を変更したら記録を残せました。
ファイルをオープンした処理が残っているだけで、
出力に関する記録は残ってませんでした。
>>642
バージョンは2003です。
普通のやり方ではうまくいかないような気がするので、
もうちょっと考えてみます。
アドバイスありがとうございました。
0644デフォルトの名無しさん
2007/11/24(土) 01:27:310645デフォルトの名無しさん
2007/11/24(土) 01:52:37他の板にExcelスレないんか?
0646デフォルトの名無しさん
2007/11/24(土) 01:55:150647デフォルトの名無しさん
2007/11/24(土) 02:00:56Sub Macro1()
ChDir "C:\temp"
Workbooks.OpenText Filename:="C:\temp\test.txt", Origin:=932, StartRow:=1 _
, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2)), _
TrailingMinusNumbers:=True
End Sub
0648デフォルトの名無しさん
2007/11/24(土) 02:02:04"012,345",1234
"123,456",2345
0649628
2007/11/24(土) 10:23:33Sub Macro1()
ChDir "C:\Documents and Settings\Owner\デスクトップ"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\Owner\デスクトップ\Book1.txt", Origin:=932, StartRow:= _
1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Columns("A:A").EntireColumn.AutoFit
End Sub
表示は2行で各行1セルでこのように表示されていました。
123,451,234
1,234,562,345
2007の試用版落としてできるか確認してみます。
お手数おかけしました。
0651デフォルトの名無しさん
2007/11/24(土) 11:26:480652645
2007/11/24(土) 11:31:31データの形式を「文字列」に指定して無いでしょ。
マクロで言うと、FieldInfo:=Array(1, 1)の最後の1がデータ形式をあらわしてて、
文字列は、xlTextFormat(=2)を指定する必要がある。
0653デフォルトの名無しさん
2007/11/24(土) 12:11:35しかし、その程度のExcelの知識もマクロの知識もなく、調べ方もわからない奴がこの先どうやっていくんでしょうね。
0654デフォルトの名無しさん
2007/11/24(土) 17:45:540655デフォルトの名無しさん
2007/11/24(土) 17:55:510656デフォルトの名無しさん
2007/11/24(土) 19:22:35俺はそんな質問には、絶対。。。
0657デフォルトの名無しさん
2007/11/25(日) 16:17:32「これですか?ええ!プログラムしちゃいますよ!自分何でも出来ますから!」
とかデカいこと抜かして
「教えてください 大量にあるので終わらないんです・・」
と、ここで教えてくん
そんな寒い背景を想像してしまいます(><
0658デフォルトの名無しさん
2007/11/25(日) 17:05:47近似曲線の追加って、多項式近似で7次以上やる方法ないのだろうか
0659デフォルトの名無しさん
2007/11/25(日) 18:13:03やりかたは自分で調べてね
0660デフォルトの名無しさん
2007/11/25(日) 18:28:310661デフォルトの名無しさん
2007/11/25(日) 18:53:410662デフォルトの名無しさん
2007/11/25(日) 19:10:54やりかたは調べたら簡単に見つかる
0663デフォルトの名無しさん
2007/11/26(月) 08:54:48って聞かれて、
どの程度だったら出来ますって言って恥ずかしくないんでしょう?
0664デフォルトの名無しさん
2007/11/26(月) 11:53:020665デフォルトの名無しさん
2007/11/26(月) 12:00:180666デフォルトの名無しさん
2007/11/26(月) 12:01:440667デフォルトの名無しさん
2007/11/26(月) 12:55:31× と、放置されたクレクレくんは怨みを抱いた
○ と、放置された日本語が変なクレクレくんは怨みを抱いた
0668デフォルトの名無しさん
2007/11/26(月) 14:57:05別にそれでも全くかまわないけど、お前はかまうの?
0669デフォルトの名無しさん
2007/11/26(月) 15:02:340670デフォルトの名無しさん
2007/11/26(月) 18:22:420671デフォルトの名無しさん
2007/11/26(月) 19:30:05マクロを起動して
Dim src As Range
Set src = Sheets("Sheet1").Cells.CurrentRegion
Set src = Sheets("Sheet1").Range("a1").CurrentRegion
とすると、srcはどちらのSetでも意図したとおり
たとえば、 $A$1:$C$2 のように設定されます。
しかし、自作関数を起動して同じコードを実行すると、
src.Addressは$1:$65536とか$A$1になります。
最初に起動したのがマクロか関数かによって結果が違っているようなのです。
関数起動で.CurrentRegionの意図した結果を得るにはどうしたらいいですか?
0672671
2007/11/26(月) 19:42:08セルの値も合ってました。
0673デフォルトの名無しさん
2007/11/26(月) 19:57:18(2) xp 2003 比較的に新機 で、
同一のマクロを実行して(visible、 enableeventsはfalseにしている)、
(1)では6秒
(2)だと12秒
(エクセルのオプション設定も同一です。)
どうしてこんなに、違うのか理由がわかりません。なにか、試してみることがありましたら、教えてください。
0674デフォルトの名無しさん
2007/11/26(月) 20:02:54同一のマクロの内容等にもよる。
0675デフォルトの名無しさん
2007/11/26(月) 20:15:25calculationをfalseにしたら、その分、かえって遅くなったぐらいです。
0676デフォルトの名無しさん
2007/11/26(月) 20:19:02書き込みが遅くなったんじゃね?
書き込みしないで比較したら?
そんなに知りたいならいくらでも調べようがあるでしょ
0677673=675
2007/11/26(月) 20:22:060678デフォルトの名無しさん
2007/11/26(月) 20:24:34再現する最小構成のブックをうp
>>673
マクロの内容を部分的に伏せたりせず全貼り(何レス消費してもいいよ
orブックごとうp
それが出来ないorしたくないならさようなら
0679デフォルトの名無しさん
2007/11/26(月) 20:28:290681673
2007/11/26(月) 20:34:25サンクス
0682デフォルトの名無しさん
2007/11/26(月) 20:40:420683671
2007/11/26(月) 21:06:09アンタ何者?
アップする場所がわからないので、ここに書いておきます。
---標準モジュール----ここから
Option Explicit
Sub sample1()
Dim src As Range
Set src = Sheets("Sheet1").Cells.CurrentRegion
Set src = Sheets("Sheet1").Range("a1").CurrentRegion
End Sub
Function fun1() As Integer
Dim src As Range
Set src = Sheets("Sheet1").Cells.CurrentRegion
Set src = Sheets("Sheet1").Range("a1").CurrentRegion
sample1
fun1 = 1
End Function
Sub sample2()
Dim r As Integer
r = fun1()
End Sub
---標準モジュール----ここまで
set のところにブレークポイントを置いておく。
[Sheet1]の中身
A1:C2の範囲に、何か適当に数値を入れる。E5に =fun1() を入れる。
マクロsample1、sample2をステップ実行する。srcをsetしたところでイミディエイトウィンドウに
?src.Address
を入力する。$A$1:$C$2となるのが、意図した動作。
E5のセルを編集して確定すると、fun1内でブレークする。
?src.Address
をしても、$1:$65536とか$A$1になる。sample1の中に入っても同様。
0684デフォルトの名無しさん
2007/11/26(月) 21:32:11気になるなら旧機に2003入れてやって見ろ。
0685デフォルトの名無しさん
2007/11/26(月) 22:29:12> E5のセルを編集して確定すると
これじゃカレントセルがE5になるから、CurrntRegionが全セルになるんジャマイカ?
0686671
2007/11/26(月) 22:47:05E5セルを編集するのは、関数を実行するためのひとつの方法です。
E5を編集しない方法で、関数を実行しても同じ結果になります。
0687デフォルトの名無しさん
2007/11/26(月) 23:18:24union
0688デフォルトの名無しさん
2007/11/27(火) 01:49:11こだわらずメソッド変えた方が良い>>686
0689671
2007/11/27(火) 07:57:38CurrentRegion以外にも動作が違うものがあるのか?とか
問題が発散してしまうのです。
0690デフォルトの名無しさん
2007/11/27(火) 08:29:090691デフォルトの名無しさん
2007/11/27(火) 11:13:10Range("A1:W引数")って感じに記述したいのですが可能ですか?
出来るなら引数部分の記述方法も教えて下さい
0692デフォルトの名無しさん
2007/11/27(火) 12:05:11普通に文字列の連結でいけます。
Range("A1:W" & 引数)
あと、range(cells(1,1), cells(引数, 23))という書き方もできます。
0693デフォルトの名無しさん
2007/11/27(火) 15:09:18をやるときは親に注意
初心者がよくやらかす間違いというか失敗です
0694デフォルトの名無しさん
2007/11/27(火) 15:43:100695デフォルトの名無しさん
2007/11/27(火) 16:19:34アドインなり個人用マクロブックなりに入れておけば、SONOPCでは汎用的に使えるし
0696デフォルトの名無しさん
2007/11/27(火) 16:30:330697デフォルトの名無しさん
2007/11/27(火) 18:33:32Range("A1:W" & 引数) という書き方は初めて見て、びっりしています。
後ろが出来たら、前も出来そうなんだけど、どう書いたらいいのですか。
今いろいろとやっていても出来なかった。
初心者の失敗とやらも教えてください。
0698デフォルトの名無しさん
2007/11/27(火) 18:59:36それって1+2=を3と教えられて、じゃあ2+1=は?って聞いてる様なもんだぞ
答え(書き方)を聞くんじゃなくて、足し算(文字列の連結)について勉強しろ
0699デフォルトの名無しさん
2007/11/27(火) 19:07:15イルカチャンに
複数セルの文字列と数値の結合について
質問してごらん。どのようなことができるか、書いてあるよ。
0700デフォルトの名無しさん
2007/11/27(火) 19:10:100701デフォルトの名無しさん
2007/11/27(火) 19:28:170702デフォルトの名無しさん
2007/11/27(火) 20:17:41>>701 特に。
0703デフォルトの名無しさん
2007/11/27(火) 21:51:520704デフォルトの名無しさん
2007/11/28(水) 00:10:190705デフォルトの名無しさん
2007/11/28(水) 01:51:55.xlaのままで指定することはできますか?
0706671
2007/11/28(水) 19:32:51マクロ起動でデータを設定したときにCurrentRegionして名前をつけ
function起動時は名前を使うこととします
0707671
2007/11/28(水) 21:10:32関数起動だと、セル関係の便利機能は使えないのですか?
そんな制限に関する解説はどっかにありませんか?
発生する例をあげておきます。
シートのA1:A9に1,2,3,4,....と入れておく
標準モジュールはじめ
Option Explicit
Function func1()
Dim found
sub1 Range("A1:A9"), found, 4
func1 = 1
End Function
Sub sub1(r As Range, found, value)
Set found = r.Find(value)
End Sub
Sub substart()
Dim found
sub1 Range("A1:A9"), found, 4
End Sub
標準モジュール終わり
適当なセルに=func1() として関数起動した場合と
マクロsubstartを実行した場合とで、.Findの結果が違います。
0708デフォルトの名無しさん
2007/11/28(水) 21:16:290709デフォルトの名無しさん
2007/11/28(水) 23:25:35関数起動ってのはいったいなんだ?
0710デフォルトの名無しさん
2007/11/28(水) 23:34:27って入力するやつだろう
本能的にvbaにワークシート関数混ぜるのは避けていたが
正解だった
0711デフォルトの名無しさん
2007/11/28(水) 23:48:042007でやってみたけど挙動は同じ
とりあえず、おかしな現象とか決めつけないで、
まずはRangeの前のシートを省略してたりするおかしなソースから直したらどうか
0712671
2007/11/28(水) 23:55:18簡単のためにシートを略しただけであって、シートをつけても同じです。
.Findのところを
Dim ofst
ofst = Application.Match(value, r, 0)
Set found = r.Cells(ofst)
としたら、関数起動とマクロ起動が同じ動作になりました。。
XP SP2、Excel2000です。
0713デフォルトの名無しさん
2007/11/29(木) 00:06:17シート略したらアクティブシートが変われば結果がかわるじゃないか
両方の動作が同じかどうか本気で検証したいのなら、
操作手順などで結果が分からないようにソース書きなよ
0714デフォルトの名無しさん
2007/11/29(木) 00:07:36○結果が変わらないように
0715671
2007/11/29(木) 00:20:09ステップ実行して、Rangeオブジェクトのaddressやvalueが同じであることも確認しています。
しかし、.Findの結果が異なるのです。
0716デフォルトの名無しさん
2007/11/29(木) 00:26:03G2という文字の場合、その文字を除いた文字を表すようにしたい。
範囲Rの中でやるので、動作が早い文を書きたい。
0717デフォルトの名無しさん
2007/11/29(木) 00:47:200718デフォルトの名無しさん
2007/11/29(木) 01:07:47VMwareにXP SP2とExcel2kだけ入れてやってみたら、確かに同じ現象になったよ
原因は分かんないけどOfficeのSPとかあててみたらどうだろうか
単にセルが編集モードになって一部機能制限があるとかなのかもしれんけどね
>>717
それはかなり遅いと思う・・・
こう書くだけで倍くらい早くなるよ
If Right$(aa, 2) = "G2" Then
変数 = Left$(aa, Len(aa) - 2)
Else
変数 = aa
End If
0719デフォルトの名無しさん
2007/11/29(木) 01:35:26http://support.microsoft.com/kb/170787/ja
http://www2.moug.net/bbs/exvba/20070914000025.htm
0720671
2007/11/29(木) 02:10:19ありがとうございます。
関数起動の場合は、input以外のセルは見ないほうがいいのですね。
ということは、今動いているように見えるinput以外のセル参照も止めたほうがいいですね。
inputのRangeに対しては、.Findは使えるのかな?
.CurrentRegionの結果を含有するような範囲をinputに入れれば.CurrentRegionは使えるのかな?
実験して後で報告します。
0721691
2007/11/29(木) 09:40:46もう一つ気になったのですがフォームに配置したテキストボックスとかにインデックスはつけられないんです
0722デフォルトの名無しさん
2007/11/29(木) 10:02:50> 実験して後で報告します。
いや、もういいから。
結果は君の心の中に・・・。
0723デフォルトの名無しさん
2007/11/29(木) 11:11:33Likeでいいのでしょうか?
0724デフォルトの名無しさん
2007/11/29(木) 11:21:230725デフォルトの名無しさん
2007/11/29(木) 12:59:11If InStr(xxx, "x") > 0 Then
ですね?
ありがとうございます。
0726デフォルトの名無しさん
2007/11/29(木) 18:57:16上みたいに、変数同士を、ピリオドでくっつける(?)のは
何でググったら分かりますか。名称とか使い方とか・・・
0727デフォルトの名無しさん
2007/11/29(木) 19:03:23おそらくcheckMsgとokMsgの両方に同じ値を入れるのを
1ステートメントでやりたいんだろうけど、そういう構文はVB、VBAには存在しないよ
存在しないんだから、何でググっても無駄
checkMsgが親(Classとか)でokMsgがプロパティだってなら話は別だけど
0728デフォルトの名無しさん
2007/11/29(木) 19:10:20ありがとうございます
ちゃんと動いているからw、後者っぽい・・・
CSVを取り込んで、シートに並べるプログラムなんですよね
0729デフォルトの名無しさん
2007/11/29(木) 21:34:000730デフォルトの名無しさん
2007/11/29(木) 22:45:22ユーザー定義型
他言語で言うところの構造体
0731デフォルトの名無しさん
2007/11/29(木) 23:44:49Set (オブジェクト変数) = Workbooks.Add
とすると、(オブジェクト変数)で操作できるけど、
既にあるExcelファイルを、(オブジェクト変数) にしたいときはどうすればいいの?
0732デフォルトの名無しさん
2007/11/30(金) 01:23:11Workbooks("hoge")やら
0733716
2007/11/30(金) 01:30:58サンクス。昨夜は寝てしまったw
お礼を兼ねて、以下、折れの意見
iif文は10年以上前、dbxlだったか、lotusかexcelであったかわからないが、よく使っていた。
今年、久々にexcelを扱うようになって、調べて、iif文は使えない(使われていない)ものと思っていた。
iif文を使えるためには入れ子でエラーを発生させない論理力が特に大事だが、入れ子が深くなるほど、if文より早いため、高速if文と呼ばれていたよw
今回、for each文で、2万セルで試して見た。セル状況にも寄るが概して、iif文の方がif文よりも少し早いと言えるね。
0734デフォルトの名無しさん
2007/11/30(金) 02:03:56◆やりたいこと
下記関数に、仮にA1:D10範囲のグラフデータを渡すとした場合
関数内部でA1:B10とA1:C10とA1:D10と1行づつずらして
複数の散布図を作成したい
◆わからないこと
rangeから1行取得し、ずらすというやり方がわからず、
下記コードの?の部分をどうするか悩んでいます。
宜しくお願いします。
function グラフ作成(rng as range)as boolean
'rangeから
for i=0 to ?
range1=?
range2=?
union(range1,range2)
'散布図作成(省略)
next i
End Function
0735デフォルトの名無しさん
2007/11/30(金) 02:49:05代入する値は自由に設定出来る。
んで、代入した値がinputしたcsvに有るか無いかで
そのcsvの素性を判断するような感じ。
0736デフォルトの名無しさん
2007/11/30(金) 05:02:22IIFのほうがIFより遅い
セル状況にもよるとか意味不明
0737デフォルトの名無しさん
2007/11/30(金) 06:00:150738734
2007/11/30(金) 08:58:37わかりずらかったので加筆します。
Rng=Range(A1:D10)から
Rng1=Range(A1:A10)を
一行だけ取り出す方法はあるのでしょうか?
もしなければ他の方法があれば教えてください
0739デフォルトの名無しさん
2007/11/30(金) 09:58:28これをがんばって(`・ω・´)習得する。
0741デフォルトの名無しさん
2007/11/30(金) 11:34:43Dim a as intger
Dim x as integer
ReDim A(x) as variant
x=0
a=1
Do while cells(a,1) <> ""
A(x)=cells(a,1).value
x=x+1
a=a+1
Loop
cells(5,5)=A(x)+A(x-1)+A(x-2)
とやりたかったのですが、
A(1)になった時にA(0)に入った値が消えています。
どこが間違っているのか御教示ください。
よろしくお願いします。
0743デフォルトの名無しさん
2007/11/30(金) 13:28:44ありがとうございます。
自力で少しずつ直しています。
Dim A() as variant
Dim a as intger
Dim x as integer
x=0
a=1
Do while cells(a,1) <> ""
ReDim Preserve A(x)
A(x)=cells(a,1).value
x=x+1
a=a+1
Loop
こんな感じで実物はうまく回るようになったと思います(ミスはまだありそうですが)
0744moge
2007/11/30(金) 13:30:57それとoption explicitもしろ
0745デフォルトの名無しさん
2007/11/30(金) 14:11:57まぁintgerは、ペタバイトの容量を扱える超変数定義だけど
0746デフォルトの名無しさん
2007/11/30(金) 14:39:17VisualStudioはタブ付いたり、関数折畳んだり出来んのに
VBAときたらいまだにホイールころころも出来ないとか・・・
>>743
最低限、コンパイルが通るソースを示しましょう
メニューの[デバッグ]→[VBAProject のコンパイル]を選択すれば確認できます
0747moge
2007/11/30(金) 15:34:400748デフォルトの名無しさん
2007/11/30(金) 20:13:25> >>738
> range("A1:D10").columns(1)
ありがとうございます。
しかしうまくいきませんでした。
列番号が返ってくるみたいです。
>>739
その方法も考えましたが別の問題がありやめました。
そるはRangeではなく、配列データから、グラフを描けるやり方がわからないのです。
できれば簡単そうなRangeで解決できればと考えています。
0749デフォルトの名無しさん
2007/11/30(金) 20:20:42返ってくるのはrangeだよ。
「列番号」って何だよ。
0750デフォルトの名無しさん
2007/11/30(金) 20:28:38unionなんか使う必要ないんじゃね?ダイレクトに始点と終点を指定してrangeを作れよ
0751デフォルトの名無しさん
2007/11/30(金) 21:08:05A1:D10からA列とC列のような飛び飛びの列からも散布図を描きたいので。
あとできるかぎり関数内で閉じていたいので関数へ引き数でRangeを渡して内部で計算したいのです。
なのでrng=Range("A1:D10")を引き数で渡して、
内部でSet rng1=Range(UNION(Range("A1:A10"),Range("C1:C10")))範囲をグラフデータにセットしたいのです。
そのためにRange("A1:A10")の一列をrngから取得したいと考えています。
0752デフォルトの名無しさん
2007/12/01(土) 05:56:40VBAのIDEでCtrl+Gしてから次のコードを実行してみろ。
Set Rng = Range("A1:D10")
Set Rng1 = Rng.Columns(1)
Set Rng2 = Rng.Columns(3)
Set Rng3 = Union(Rng1, Rng2)
Debug.Print Rng.Address
Debug.Print Rng1.Address
Debug.Print Rng2.Address
Debug.Print Rng3.Address
0753デフォルトの名無しさん
2007/12/01(土) 13:16:12できました。sを付け忘れていました。ありがとうございました
0754デフォルトの名無しさん
2007/12/01(土) 15:43:38どなたか御教示いただけませんでしょうか?
1.A列各行にあ入力済みの数値(入力数はデータにより一定ではない)を
B列とC列とを結合したセルにコピー(表の体裁上、結合しています)
2.コピー先の行間は表の関係から8行ずつ空ける
3.この一連の動作を行う回数はA列に値が入っている数とする(=count(A:A))
今までは回数指定もできず、下記の超初心者な式を必要分だけコピー、修正していたのですが
データ数が多い場合、この修正作業自体がミスを誘発してしまうので、もっと機械的に
処理できるようなマクロを使いたいと思っています。
Range("A1").Copy Range("B1:C1")
Range("A2").Copy Range("B10:C10")
Range("A3").Copy Range("B19:C19")
・
・
・
私の能力では、本を見てもネットで調べてもわかりませんでした。
どうぞよろしくお願いいたします。
0755754
2007/12/01(土) 15:45:16A列各行にあ入力済み→A列各行に入力済み
です。
0757デフォルトの名無しさん
2007/12/01(土) 16:44:45a=要素数をセット
b = 1
for j=1 to a
Range( "A" & j ).Copy Range("B" & b , ":C" & b)
b = b + 9
next
0758デフォルトの名無しさん
2007/12/01(土) 17:28:46> Range( "A" & j )
質問者ではないが横から失礼。
これいつも困るんだけど英語の部分が変数のときはどうしていますか?
0759デフォルトの名無しさん
2007/12/01(土) 17:39:140760デフォルトの名無しさん
2007/12/01(土) 18:01:57ttp://www.amazon.co.jp/gp/product/4873113474/
0761デフォルトの名無しさん
2007/12/01(土) 19:20:13値だけでいいならB1:C1に =OFFSET($A$1,(ROW()-1)/9,0) って入れて
B1:C9を選択してフィルコピーすれば済むと思うんだけど
どうしてもVBAで書式までコピーしたいならEndプロパティ使ってA列のデータ末尾取得して
その範囲に対してFor Each回し、初期値を1にした変数使って
Cells(変数, 2).MergeAreaにコピーした上で、変数の値を9増加してやればいいだろ
これで解らないようなら>>2★5ね
0762デフォルトの名無しさん
2007/12/01(土) 19:34:12Dim hoge As String
hoge = "A"
Range(hoge & 1)
とか?
0764デフォルトの名無しさん
2007/12/01(土) 22:06:52変数に、Aとかでなく数値でもってるとき。
具体的な書き方がわからず悩んだことがあって。
0765デフォルトの名無しさん
2007/12/01(土) 22:22:58つ Chr(変数)
0766デフォルトの名無しさん
2007/12/01(土) 23:23:090767デフォルトの名無しさん
2007/12/02(日) 00:17:560768デフォルトの名無しさん
2007/12/02(日) 00:31:53削除した記憶はないから何処かに残ってるだろうが
探すの('A`)マンドクセ
少なくとも内蔵HDDには入ってないだろうから
0769デフォルトの名無しさん
2007/12/02(日) 00:36:410770デフォルトの名無しさん
2007/12/02(日) 00:52:23つ Chr(変数 +64)
0771デフォルトの名無しさん
2007/12/02(日) 03:43:08excel に対しADOで接続したとき、そこでデータベース的にデータをadd/updateできるのは
普通の使い方ですが、このときデータではなく、関数を挿入することって出来ますか?
普通ならformula関数で関数をセットするところを、ADO経由で行うことが出来ますか?という質問です。
。
0772デフォルトの名無しさん
2007/12/02(日) 07:48:040773デフォルトの名無しさん
2007/12/02(日) 09:57:080774デフォルトの名無しさん
2007/12/02(日) 10:44:52つ Chr(変数1 +64) &Chr(変数2 +64)
0775デフォルトの名無しさん
2007/12/02(日) 11:55:040776デフォルトの名無しさん
2007/12/02(日) 14:05:08自己レスです。ADOだけでは無理だとしても、
excel側に、"="で始まる文字列データを見つけたら関数につっこみ直すというプロシジャを用意しておき、
ADOでとりあえずいったん"=..."の関数を意味する文字列を作って、それを文字列データとして
フィールドにセットしてから、用意したプロシジャをたたけばいいのかなと考えました。それでやってみます。
0777デフォルトの名無しさん
2007/12/02(日) 17:10:37いや、普通じゃないから
普通はRange(Cells)オブジェクトのFormulaプロパティを使うから
ADOを使う意味なんて全くない、どころかデメリットしかない
0778デフォルトの名無しさん
2007/12/02(日) 18:47:49昔のお宝なんて今は常識みたいなものだから、分かってる人には必要ない。
俺の書き込みもお宝に多数取り上げられたが、今では全然たいしたことないテクニックばかり。
0779デフォルトの名無しさん
2007/12/02(日) 19:35:19つ IIf(変数 > 26, Chr(CInt((変数 - 1) / 26) + 64), "") & Chr(((変数 - 1) Mod 26) + 65)
0780デフォルトの名無しさん
2007/12/02(日) 20:48:40しつこい
0781デフォルトの名無しさん
2007/12/02(日) 21:57:03だめだめだな
0782デフォルトの名無しさん
2007/12/02(日) 23:56:25特定されるからどの章かは言わないけど、かつてとある章を編集してどんな内容だったか
見たいんです。
この間、HDDが壊れて、このスレ読んでてバックアップしたCD-R読もうとしたら読めなかったorz
0783デフォルトの名無しさん
2007/12/03(月) 00:25:07日本語でOK
0784デフォルトの名無しさん
2007/12/03(月) 00:36:50このスレを読んでいてその存在を思い出して、バックアップしたCD-Rから読もうとしたけど読めなかったんです。
0785デフォルトの名無しさん
2007/12/03(月) 06:50:420787デフォルトの名無しさん
2007/12/03(月) 07:22:51書くほうも読むほうも語学力無さ過ぎだな。哀れ。
0788デフォルトの名無しさん
2007/12/03(月) 09:45:24誰かファイル持ってませんかってことだろ。
0789デフォルトの名無しさん
2007/12/03(月) 09:52:53Office Tanakaの中の人とか。
0790デフォルトの名無しさん
2007/12/03(月) 13:28:48MS Help形式で結構便利だった気がする
0791デフォルトの名無しさん
2007/12/03(月) 13:50:24日本語で(ry
>このスレ読んでてバックアップしたCD-R読もうとしたら読めなかったorz
日本語で(ry
0792デフォルトの名無しさん
2007/12/03(月) 14:23:240793デフォルトの名無しさん
2007/12/03(月) 15:40:05この場合のWithってどういう意味なのでしょうか?
With Range("a1")
Do
If F = False Then Exit Do
i = (i + 1) Mod 10
.Value = i
DoEvents
Loop
End With
実行すると、A1にiの値が表示されます。
Range("B5").Value=i と同じ意味になるのでしょうか?
なぜ、Withを使うのでしょうか?
0794デフォルトの名無しさん
2007/12/03(月) 15:47:25一旦Range("a1")を変数に代入するのと同じなのか、
Range("a1").Valueと毎回指定するのと同じなのか
実際どっちなのかは知らないから俺も教えてほしい
0795デフォルトの名無しさん
2007/12/03(月) 15:47:56read the fucking manual
0796デフォルトの名無しさん
2007/12/03(月) 15:51:35後でうpする
0797796
2007/12/03(月) 16:56:490798デフォルトの名無しさん
2007/12/03(月) 18:23:03→ .Value = i
End With
withは記述を簡略化できる。
本来 Range("a1").Value = i と書くべき所、withからEnd Withの間は .Value = i と書くだけでおk
Range("a1")の分書くのが楽になったんだぜ☆(ゝω・)v
0799デフォルトの名無しさん
2007/12/03(月) 18:28:45『高速化 VBA』 で検索したらいろんな方法が学べるよ
0801デフォルトの名無しさん
2007/12/03(月) 19:39:520802デフォルトの名無しさん
2007/12/03(月) 20:49:50r.Value = i
とどちらが速いですか?
0803デフォルトの名無しさん
2007/12/03(月) 21:08:450804デフォルトの名無しさん
2007/12/03(月) 21:19:18やろうとはせず、「調べても解りません、困ってます」とか言い出す
0805デフォルトの名無しさん
2007/12/03(月) 21:23:11そっちの方が断然速い
0806デフォルトの名無しさん
2007/12/03(月) 21:33:430807デフォルトの名無しさん
2007/12/03(月) 21:37:05試せよ
0808デフォルトの名無しさん
2007/12/03(月) 21:44:01残念、ハズレ
0809デフォルトの名無しさん
2007/12/03(月) 21:46:340810デフォルトの名無しさん
2007/12/03(月) 21:48:300811デフォルトの名無しさん
2007/12/03(月) 22:04:320812デフォルトの名無しさん
2007/12/04(火) 09:03:23区間0.000〜0.400、区間数n=4として
Data(2,10)AS Variant
rng AS Range
gdata(4,2)AS Variant
rng=Range("A1:B10")
Set Data(2,10)= rng '←�@この代入は可能ですか?
(ここでいろいろ計算した結果下記のグラフ作成データが得られるとする)
gdata=Array({0.000,0.100,0.200,0,300},{1,3,4,2})
Chart.Add
〜Source gdata '←�Aグラフデータ設定方法はRangeでなくても可能ですか?
以下Chart.Typeを棒グラフに設定
〜〜
-------
Range("A1:B10")の範囲に
選手,打率
松井,0.352
古田,0.221
新井,0.153
間中,0.262
亀井,0.301
田中,0.192
萩原,0.153
喪菜,0.082
田淵,0.274
井坂,0.225
0813デフォルトの名無しさん
2007/12/04(火) 09:33:43Data = rng.value
0814デフォルトの名無しさん
2007/12/04(火) 12:58:43お前時代遅れのハンガリアンとか使ってない?
あとコメントもだらだらと毎行書いてそうだなw
0815デフォルトの名無しさん
2007/12/04(火) 13:12:530816デフォルトの名無しさん
2007/12/04(火) 13:39:03rがRangeなのも普通
0817デフォルトの名無しさん
2007/12/04(火) 13:49:060818デフォルトの名無しさん
2007/12/04(火) 14:24:520819デフォルトの名無しさん
2007/12/04(火) 17:53:150820デフォルトの名無しさん
2007/12/04(火) 18:12:42JAVAみたいになんでもクラスな言語でハンガリアンの型表現は意味ないが
VBAでハンガリアンが時代遅れとか関係ないだろ
時代遅れって・・・流行りでやってるとでも思ってんのかよw
0821デフォルトの名無しさん
2007/12/04(火) 18:28:31しかも正当化にまで至ってるのはカスを越えてクズだな
0822sage
2007/12/04(火) 18:46:150823デフォルトの名無しさん
2007/12/04(火) 19:01:140824デフォルトの名無しさん
2007/12/04(火) 19:08:44クラスの中はふつーJAVAでもハンガリアンだろ
0825デフォルトの名無しさん
2007/12/04(火) 19:54:35オマイは
For lngCounter = 1 To lngLastRow
などとやりそうだなw
0826デフォルトの名無しさん
2007/12/04(火) 20:26:31俺はそこらのカスとチームは組まないからコーディング規約などない
一人で勝手に作って納入してる
0827デフォルトの名無しさん
2007/12/04(火) 20:41:49釣りだとしてもおもしろすぎ
0828デフォルトの名無しさん
2007/12/04(火) 20:45:340829デフォルトの名無しさん
2007/12/04(火) 20:51:51わざわざVBAでコーディングすることもあるよねー
0830デフォルトの名無しさん
2007/12/04(火) 20:57:27わざわざもないだろw
0831デフォルトの名無しさん
2007/12/04(火) 21:04:350832デフォルトの名無しさん
2007/12/04(火) 21:10:430833デフォルトの名無しさん
2007/12/04(火) 21:13:36欲しがるから仕方ない
0834デフォルトの名無しさん
2007/12/04(火) 21:16:57これだけは真理だな
0835デフォルトの名無しさん
2007/12/04(火) 21:19:42楽できるからな
0836デフォルトの名無しさん
2007/12/04(火) 21:27:27最下層の会社にしかそんな依頼は来ないが
そういう依頼が来ることがあるのは確かだよ
0837デフォルトの名無しさん
2007/12/04(火) 21:42:320838デフォルトの名無しさん
2007/12/04(火) 22:02:35珍しくないから仕方ない
0839デフォルトの名無しさん
2007/12/04(火) 22:10:53そう思い込んで安心したいのは人間の真相心理です
その逆で、人とは違うことをしたいという心理も、主に幼い頃や若い頃にはありますが
0840デフォルトの名無しさん
2007/12/04(火) 22:11:08大きな仕事に向いてるだろ
小さなプログラムの最適化は他の言語だろうが
0841デフォルトの名無しさん
2007/12/04(火) 22:44:28formatは文字型を返すんだが。
0842デフォルトの名無しさん
2007/12/04(火) 22:45:58CStr(Format(Day(Now()), "dd"))は駄目?
0843デフォルトの名無しさん
2007/12/04(火) 22:49:49Format$(now(),"dd")
0844831
2007/12/04(火) 22:57:44お礼に出来たものを書きます。
いろいろやってみて、最終的なものと思います。
Format$(Date,”mm dd”)
これで、今日なら、12 04と返してくれます。
いろんな応用を調べていました。おもしろいです。
0845デフォルトの名無しさん
2007/12/04(火) 23:04:31ユーザーフォームへのドラッグ&ドロップでファイルパスを取得するやり方を教えてください
0846デフォルトの名無しさん
2007/12/05(水) 00:14:010847デフォルトの名無しさん
2007/12/05(水) 00:24:25無茶させようとする人がいるのと、実際に無茶できるのが
悲劇の始まり。
0848デフォルトの名無しさん
2007/12/05(水) 08:57:26よくコメントを書きまくれば可読性が上がると思い込んでるアフォがいるよな
コメントは少ない方が可読性は上がるということが分からないらしい
0849デフォルトの名無しさん
2007/12/05(水) 10:03:230850デフォルトの名無しさん
2007/12/05(水) 10:50:21ケースバイケースだな
ビジネスロジックの部分にコメント入れないのはダメダメだ
0851デフォルトの名無しさん
2007/12/05(水) 11:14:080852デフォルトの名無しさん
2007/12/05(水) 15:04:52Sub conpare()
Dim fromRange As Range
Dim toRange As Range
For Each fromRange In Worksheets("Sheet1").Range("E5:E132")
For Each toRange In Worksheets("Sheet2").Range("A1:A43")
If StrComp(fromRange.Value, toRange.Value, vbTextCompare) = 0 Then
Cells(fromRange.Row, 6).Value = "○"
End If
Next toRange
Next fromRange
End Sub
For Each fromRange In Range("E5:E132")
は通るんで、Worksheetsの使い方が悪いんだろうけど、良く分らん
0853デフォルトの名無しさん
2007/12/05(水) 15:13:06・誰にどう怒られるのか
・要求仕様を明確に
0854デフォルトの名無しさん
2007/12/05(水) 15:22:140855デフォルトの名無しさん
2007/12/05(水) 15:26:50Worksheets("Sheet1")
sheet1に名前付けてたからそっちの名称じゃないと見つからんのな
0856デフォルトの名無しさん
2007/12/05(水) 22:21:530857デフォルトの名無しさん
2007/12/06(木) 09:19:460858デフォルトの名無しさん
2007/12/06(木) 14:59:15ステップ実行:きちんとセルに値が入る
普通に実行:セルは空欄のまま
プログラムには触っていませんがこのように結果が変わってきます。
どのような原因が考えられますか?
0859デフォルトの名無しさん
2007/12/06(木) 15:03:110860デフォルトの名無しさん
2007/12/06(木) 15:15:51その説明、漠然としているので原因なんて推測できないっすね。
多分なんかすっとぼけてるだけのような気がしますけど。。。
解決したらちゃんと教えてくださいね。
0861858
2007/12/06(木) 15:42:37漠然としてて申し訳ないです。
原因はExcelシートを指定してなかった為でした。
cells(x,y)
↓
objExcelSheet.cells(x,y)
で思った通りに動いてくれました。
ありがとうございます。
0862デフォルトの名無しさん
2007/12/06(木) 16:54:48いくらデータベース化してても、結局サーバ内のファイルを手動で見に行くようになっています
そこでハイパーリンクを使ってセルクリックで開くようにしたいのです
サーバには↓のような感じで保存されていています
\\鯖\見積り\○×商事\H19年\ABC-001 複合プリンター一式.xls
今までのは手動でいれるしかないとしても、今後は登録する時に一緒にリンクをはっておきたいのです
つまり登録する時にあるセルに
=HYPERLINK("ファイルの保管場所",開く)
と記入したいのですが、いちいちファイルのプロパティから保管先をコピーするのが辛く…
VBA等でそういうのを入手する方法は無いでしょうか?
(ファイルを開くみたいな動作で保管先をクリップボードに読み出せるだけでもOKです)
0863デフォルトの名無しさん
2007/12/06(木) 16:58:350864デフォルトの名無しさん
2007/12/06(木) 18:23:160865デフォルトの名無しさん
2007/12/06(木) 18:37:21Dim い As String
Dim う As New DataObject
あ = "Excelファイル (*.xls),*.xls,CSVファイル (*.CSV),*.CSV,テキストファイル (*.TXT),*.TXT"
い = Application.GetOpenFilename(あ, 1, "ファイル名取得")
If い = "" Then Exit Sub
With う
.SetText い
.PutInClipboard
End With
>(ファイルを開くみたいな動作で保管先をクリップボードに読み出せるだけでもOKです)
はいはい解決解決
0866デフォルトの名無しさん
2007/12/06(木) 19:41:22判定結果をラベルに表示するというプログラムを作りたいのですが、
テキストボックスの入出力やラベルへの入出力の文がわかりません。
調べ方が悪いのか、自分で解決できなくて困っています。
どなたか教えていただけませんか?
だらだらとわかりにくくてすみません。
0867866
2007/12/06(木) 20:00:16で数字を読めることがわかりました。
Range("a1").Value = 変数
で変数の値を表示させたらテキストボックスに入力した
まま表示されたので、よかったです。
引き続きラベルに表示させようとしていますが、
Label1.Value = 変数
では「プロパティかメソッドをサポートしていません」と言われます・・・。
もうちょっと色々試してみます。
0868デフォルトの名無しさん
2007/12/06(木) 20:16:46開いてなければファイルAを開く
という文章が上手くいきません。。
教えてください、お願いします。
0869デフォルトの名無しさん
2007/12/06(木) 21:10:590870デフォルトの名無しさん
2007/12/06(木) 21:23:45LabelはCaptionだろ。インテリセンス使え。F1押せ。ヘルプ見ろ。
>>868
アクティブって何だ?誰がアクティブにするんだ?
0871デフォルトの名無しさん
2007/12/06(木) 21:24:32処理前にファイルAを開く
でいいんじゃないかな
0872デフォルトの名無しさん
2007/12/06(木) 21:28:020873デフォルトの名無しさん
2007/12/06(木) 22:13:32Sub compare()
Dim fromRange As Range, toRange As Range, Str As String, flag As Boolean
For Each fromRange In Worksheets("Result").Range("E5:E132")
flag = False
For Each toRange In Worksheets("sheet1").Range("A1:A43")
If StrComp(fromRange.Value, toRange.Value, vbTextCompare) = 0 Then
flag = True
End If
Next toRange
If flag = True Then Cells(fromRange.Row, 7).Value = "○" Else Cells(fromRange.Row, 7).Value = "×"
Next fromRange
End Sub
Sub compare2()
Dim fromRange As Range, toRange As Range, Str As String, flag As Boolean
For Each fromRange In Worksheets("Result").Range("E5:E132")
flag = False
For Each toRange In Worksheets("sheet2").Range("B1:B80")
If StrComp(fromRange.Value, toRange.Value, vbTextCompare) = 0 Then
flag = True
End If
Next toRange
If flag = True Then Cells(fromRange.Row, 8).Value = "○" Else Cells(fromRange.Row, 8).Value = "×"
Next fromRange
End Sub
0874デフォルトの名無しさん
2007/12/06(木) 22:13:42もっと句読点を使ってみたらどうでしょう
0875デフォルトの名無しさん
2007/12/06(木) 22:19:270876デフォルトの名無しさん
2007/12/06(木) 23:11:310878873,875
2007/12/07(金) 14:32:10Dim tempRange(2)
tempRange(1) = Worksheets("sheet1").Range("A1:A43")
tempRange(2) = Worksheets("sheet2").Range("B1:B80")
て出来ますね。これでまとめる事が出来ました
0879デフォルトの名無しさん
2007/12/07(金) 14:46:30csvをワークシートとして開けた場合、展開されるのはsheet1が暗黙の了解だろうと
set tempRange = workbooks("temp.csv").Sheets("sheet1").Range("A1:A700")
と設定したのですが
Sub compare()
Dim fromRange As Range, toRange As Range, tempRange As Range, Str As String, flag As Boolean
workbooks.Open Filename:="D:\temp.csv", Format:=1
⇒set tempRange = workbooks("temp.csv").Sheets("sheet1").Range("A1:A700")
For Each fromRange In Worksheets("Result").Range("E5:E132")
flag = False
For Each toRange In Worksheets("sheet2").Range("B1:B80")
If StrComp(fromRange.Value, toRange.Value, vbTextCompare) = 0 Then
flag = True
End If
Next toRange
If flag = True Then Cells(fromRange.Row, 8).Value = "○" Else Cells(fromRange.Row, 8).Value = "×"
Next fromRange
と、すると⇒で「インデックスが有効範囲にありません。(Error 9)」と怒られます
開け方悪いですかね?
set tempRange = workbooks("temp.csv").Worksheets("sheet1").Range("A1:A700")
でも怒られましたし、良く分らんです
0880デフォルトの名無しさん
2007/12/07(金) 14:48:180881デフォルトの名無しさん
2007/12/07(金) 14:55:45マクロを記録しながらマニュアルで操作して、どんなコードが生成されるか観察しろ
0882デフォルトの名無しさん
2007/12/07(金) 18:43:420883デフォルトの名無しさん
2007/12/07(金) 20:03:440884デフォルトの名無しさん
2007/12/07(金) 20:19:190885デフォルトの名無しさん
2007/12/08(土) 00:32:10*
**
***
****
*****
↑のようなメッセージボックスを表示させたいとき、
Sub ex_1() ←タイトル
a = "" ←空のaの箱をつくる
For i = 1 To 5 ←iの値の範囲を指定
For j = 1 To i ←jの値の範囲を指定
a = a & "※" ←?
Next j ←次のjへ
a = a & vbCrLf ← a を aと 改行にする
Next i ←次のiへ
MsgBox a ←iをメッセージボックスに表示
End Sub
とある(矢印は自分のメモです。)のですが、5行目の意味がよくわかりません。
5行目の時点で、aという箱はどうなっているんでしょうか??
また、 i と j は a に関わってないように思えるのですが、どうしてaの行数・文字数が i と j で決まるのでしょうか?
0886デフォルトの名無しさん
2007/12/08(土) 00:43:49最初aの箱は空の状態
iの一回目のループで、
jは一回ループする。
aの箱には※が入る。←質問の答え
改行
iの二回目のループで、
jは二回ループする。
aの箱には※が二回入る。
改行
・
・
・
以下五回目まで続く。
0887デフォルトの名無しさん
2007/12/08(土) 00:46:39a & "※" は a と ※っていう意味じゃあなかったんですね。
これで徹夜せずにすみそうです。
0888デフォルトの名無しさん
2007/12/08(土) 06:14:11Dim strChr As String
Dim intCnt As Integer
For intCnt = 1 To 5
strChr=String(intCnt,"*") & vbCrLf
Next
Msgbox strChr
0889デフォルトの名無しさん
2007/12/08(土) 06:15:35× strChr=String(intCnt,"*") & vbCrLf
◎ strChr=strChr & String(intCnt,"*") & vbCrLf
0890デフォルトの名無しさん
2007/12/08(土) 09:00:270891デフォルトの名無しさん
2007/12/08(土) 10:46:130892デフォルトの名無しさん
2007/12/08(土) 11:52:57先生もよく解ってないんだろうな
0893デフォルトの名無しさん
2007/12/08(土) 11:55:390894デフォルトの名無しさん
2007/12/08(土) 11:58:37BASICの代わりなんだろう
0895デフォルトの名無しさん
2007/12/08(土) 12:37:470896デフォルトの名無しさん
2007/12/08(土) 12:40:38オマイは
For lngCounter = 1 To lngLastRow
などとやりそうだなw
0897デフォルトの名無しさん
2007/12/08(土) 12:49:160898デフォルトの名無しさん
2007/12/08(土) 12:49:41コピペ乙
0899デフォルトの名無しさん
2007/12/08(土) 13:21:48シートネーム"シート1"が、あるとき
For ii = 1 To Worksheets.Count
sheet = Worksheets(ii).Name
If (sheet = "シート1") Then
:
End If
Next
で変数sheetが"シート"になって
(sheet = "シート1") がOKになるんですが
シートネームに、日本語+数字をつけるのはいけないんでしょうか。
0900デフォルトの名無しさん
2007/12/08(土) 13:39:200901デフォルトの名無しさん
2007/12/08(土) 14:08:090903デフォルトの名無しさん
2007/12/08(土) 17:13:17Excel2003でIE6をVBAで操作しています。
Set objIE = CreateObject("InternetExplorer.application")
strURL = "http://・・・・
objIE.Navigate strURL
MsgBox objIE.Document.all(1).innerHTML
こういった感じでソースHTMLを確認しているのですが、
HPが表示されJavascriptで書き換えられている前のHTMLしか確認できません
ローカルウンドウで表示される他のDocumentも探ってみたのですが
どうも旨くいかず見つかりません。
書き換えられた後のHTMLデータを取得したいのですがヒントを御願い致します。。
0904デフォルトの名無しさん
2007/12/08(土) 18:07:360905デフォルトの名無しさん
2007/12/08(土) 20:31:46ここでdocumentcompleteを待ってないせいじゃないのか?
MsgBox objIE.Document.all(1).innerHTML
0906デフォルトの名無しさん
2007/12/09(日) 13:54:52下記の構文では1回の移動しかしてくれません。
どなたか正しい構文を御教示願いないでしょうか?
i = 5
Range("A4:A8").Copy Range("B4")
Range("A4:A8").Offset(i, 0).Copy Range("B4")
i = i + 5
0907デフォルトの名無しさん
2007/12/09(日) 14:13:240908デフォルトの名無しさん
2007/12/09(日) 14:23:490909デフォルトの名無しさん
2007/12/09(日) 22:39:27sub の外に出しても、コマンドボタンに割り当てられたマクロを抜けたら
値が保持される保証はないので、偶然でも動けばいい人以外はNG
0910デフォルトの名無しさん
2007/12/09(日) 23:45:240911デフォルトの名無しさん
2007/12/09(日) 23:57:06おまえはすぐ上のレスも読めないのか
0912デフォルトの名無しさん
2007/12/10(月) 00:45:050913デフォルトの名無しさん
2007/12/10(月) 09:12:32910の案は間違っているからどうでもいいとして
i は Integer でも int でもなく Index のことだから型は関係ねえぞ
0914デフォルトの名無しさん
2007/12/10(月) 09:56:540915デフォルトの名無しさん
2007/12/10(月) 11:06:42なんつーかそこまでして変数名を1文字にする意味がないと思うのは気のせい?
0916デフォルトの名無しさん
2007/12/10(月) 11:40:170917デフォルトの名無しさん
2007/12/10(月) 11:50:03気のせいじゃない
というか、誰も変数を1文字にする必要があるとか意味があるとかなんてことは一言も言ってない
単に状況によっては1文字変数にも不都合はないというだけの話
0918デフォルトの名無しさん
2007/12/10(月) 13:14:55ハンガリアン狂いはリストでも聴いてなさい
0919デフォルトの名無しさん
2007/12/10(月) 13:17:590920デフォルトの名無しさん
2007/12/10(月) 15:21:31ワークシート別に異なる編集処理を、同じ書式(同じメソッド名)で呼び出そうとしています。
現在、以下のように、Implementsを使用しようとしていますが、上手くいきません。
-ClassIF.cls- (PublicNotCreatable)
Public Function GetTestString() As String
End Function
-Sheet1-
Implements ClassIF
Private Function ClassIF_GetTestString() As String
ClassIF_GetTestString = "てすと"
End Function
-ThisWorkbook-
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim TestIF As ClassIF
Set TestIF = Me.Worksheets.Item(1)
MsgBox TestIF.GetTestString
End Function
0921920
2007/12/10(月) 15:24:16上記のコードだと、コンパイルは通りますが、実行時に 「型が一致しません」 とエラーとなるので、
> Dim TestSh As Sheet1
Dim TestIF As ClassIF
> Set TestSh = Me.Worksheets.Item(1)
Set TestIF = Me.Worksheets.Item(1)
とすると、一旦エラーとなりますが、ステップ実行を継続すると以降は動くようになりました。
情けないのですが、何をどう間違えているのか、判断が付きません。
目的は、多数のシートの処理を同じ書式で呼ぶことです。
(シートが多く、今後メソッドも増加することが予想されるので保守性を高めるため。)
また、試しに、CallByName(Me.Worksheets.Item(1), "OwnerStr", VbMethod) を試したところ、
「メモリが不足しています。」 となりダメでした。(Public Function OwnerStr() を追加。端末メモリは1G)
環境は、WinXP SP2 + Office2003 VBA:6.4.8869 です。
なお、開発環境の制約上、VBが使用できません。 何らかのアイデアを頂ければ幸いです。
0922デフォルトの名無しさん
2007/12/10(月) 16:31:580923デフォルトの名無しさん
2007/12/10(月) 17:55:51ありがとうございます。こちらでも試してみたのですが、動いたり動かなかったりです。
こちらの環境では、初めは動いても、ファイルを保存して開きなおすと動かなくなります。
しかも、そうなると、再び動くようにするにはどうすれば良いか分からなくなってしまう状況です。
Set TestIF = Sh
Sh.Range("A1:E5").Value = TestIF.GetTestArray ←例えば2次元配列を返す
とか書ければスッキリするんですけど、そもそも確実には動かないので使い物になりません・・・
0924デフォルトの名無しさん
2007/12/10(月) 20:14:19セキュリティの設定を変更しないとダメだが、一応これなら2007ではうまくいった
2003は持ってるけどインスコめんどいので試してないからやってみれ
-ThisWorkbook-
Private Sub Workbook_Open()
On Error GoTo SECURITY_ERROR
Dim p As Variant
For Each p In ThisWorkbook.VBProject.VBComponents
Debug.Print p.Properties("Name").Name
Next p
Exit Sub
SECURITY_ERROR:
'http://support.microsoft.com/kb/282033/ja
Call MsgBox("セキュリティ設定によりマクロからVBAプロジェクトへのアクセスが禁止されています。", vbCritical, "セキュリティ エラー")
End Sub
0925デフォルトの名無しさん
2007/12/10(月) 20:29:36「動かなかったり」って時は、VBAProjectがコンパイルされてない時とイコールだったりしない?
0926デフォルトの名無しさん
2007/12/10(月) 21:16:12class Worksheet implements IFooじゃないところが。つまり、implementsを書かないworksheetが存在してもOKなところ。
じゃぁ、どうやればいいかって聞かれると、即答できない・・・
0927デフォルトの名無しさん
2007/12/10(月) 21:25:240928デフォルトの名無しさん
2007/12/10(月) 21:33:46整数型ならなんでもいいよ
0929920
2007/12/10(月) 21:33:47動きました! ありがとうございます!
923みたいに、配列を返してセルをまとめて埋めちゃうような処理でもバッチリ動きました。
処理を目にしても、なおピンと来ませんが、前もって1度アクセスしとくって感じですかね。
凄いなー・・・ そんなの絶対に分からないです。俺ももっと精進します・・・
応用を考えて、色々試して見ます。本当にありがとうございました。
>>925
コンパイルが通らないときは動きません。 通っても一旦終了するとダメだったりしてました・・・
>>926
そうなんですよね、”何となくダメっぽい” んですけど、どうすればいいかサッパリな事が多くて。
0930デフォルトの名無しさん
2007/12/10(月) 21:34:020931デフォルトの名無しさん
2007/12/10(月) 21:53:360932デフォルトの名無しさん
2007/12/10(月) 22:23:26アフォか
実体を取得してないのにインプリメントしただけで参照が通るわけネーダロ
まあ、モジュール行ったり来たりの実用性に乏しいところを見ると、単なる実験だろうけど
以下のコードをSheet1の方に記述してから、このプロパティを呼び出してみ
Public Property Get MyEntity() As ClassIF
Set MyEntity = Me
End Property
それにしてもiはインデックスとか1文字変数野郎にはキチガイが多いな(~ε~;)
0933デフォルトの名無しさん
2007/12/10(月) 22:49:150934デフォルトの名無しさん
2007/12/10(月) 22:52:11またキチガイが来てるのかw
0935デフォルトの名無しさん
2007/12/10(月) 23:01:11ベストなやり方とは言えないが、これで現状の処理に合わせたまま対応できるな
'参照設定 TypeLib Infomation
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim m As CodeModule
Dim c As ClassIF
Dim t As TLIApplication
Dim v As Variant
Set t = New TLIApplication
Set c = New ClassIF
Set m = ThisWorkbook.VBProject.VBComponents(Sh.Name).CodeModule
Call m.AddFromString("Implements ClassIF")
For Each v In t.InterfaceInfoFromObject(c).Members
Call m.CreateEventProc(v.Name, "ClassIF")
Next v
End Sub
0936920
2007/12/10(月) 23:08:18機能を増やした時の保守性のため、ClassIF を抽象クラス的に使おうとしてます。
なので、できれば Sheet1 に外部からアクセス(Public定義)させたくないのです。
従って、ClassIFを返す意味がないのです。
それから、多分それだと動きません。(そもそも実行時に MyEntityを取得できない)
意図を読み違えていたらすいません・・・。
0937デフォルトの名無しさん
2007/12/11(火) 01:25:29Sub Dilemma_of_Prisoners()
Dim TE1 As Boolean, TE2 As Boolean, preTE1 As Boolean, preTE2 As Boolean
Dim I As Integer, N As Integer
point1 = 0
point2 = 0
N = 5 ' 繰り返し回数
For I = 1 To N
TE1 = Player1(I, preTE2)
TE2 = Player2(I, preTE1)
preTE1 = TE1
preTE2 = TE2
If TE1 Then
If TE2 Then
point1 = point1 + 3
point2 = point2 + 3
0938デフォルトの名無しさん
2007/12/11(火) 01:25:35point1 = point1 + 0
point2 = point2 + 5
End If
Else
If TE2 Then
point1 = point1 + 5
point2 = point2 + 0
Else
point1 = point1 + 1
point2 = point2 + 1
End If
End If
Next I
MsgBox "プレイヤー1=" & point1 & vbCrLf & "プレイヤー2=" & point2
Range("A1") = "プレイヤー1=": Range("C1") = point1
Range("A2") = "プレイヤー2=": Range("C2") = point2
End Sub
0939デフォルトの名無しさん
2007/12/11(火) 01:26:20'人間がプレイする場合のルーチン
Private Function Player2(kaisu As Integer, TE As Boolean) As Boolean
' プレイヤーが人間の場合
If kaisu = 1 Then
Reply = MsgBox("協調しますか?", vbYesNo, "(" & kaisu & ")回目")
Else
If TE Then
aite = "「協調」"
Else
aite = "「裏切り」"
End If
Reply = MsgBox("前回、相手は" & aite & "でした。" & vbCrLf & _
"協調しますか?", vbYesNo, "(" & kaisu & ")回目")
End If
If Reply = vbYes Then
Player2 = True
Else
Player2 = False
End If
End Function
0940デフォルトの名無しさん
2007/12/11(火) 01:28:58コンピューター側の行動を書きに沿って作っているのですが、
1.しっぺ返し戦略
2.「裏切り」戦略
3.罰戦略
4.寛容戦略
5.でたらめ戦略
6.独自の戦略
0941デフォルトの名無しさん
2007/12/11(火) 01:29:30Private Function Player1(kaisu As Integer, TE As Boolean) As Boolean
If kaisu = 1 Then
Player1 = False
End If
End Function
寛容
Private Function Player1(kaisu As Integer, TE As Boolean) As Boolean
If kaisu = 1 Then
Player1 = else
End If
End Function
0942デフォルトの名無しさん
2007/12/11(火) 01:30:32お知恵を頂けないでしょうか?
お願いいたします。
0943デフォルトの名無しさん
2007/12/11(火) 06:40:310944デフォルトの名無しさん
2007/12/11(火) 11:52:41moduleに、
Public Function GetTestString(ByRef w As Worksheet) as Hoge
Select Case w.Name
・・・
End Select
End Function
とかやったほうが、何の問題もなく、すっきりしてる気がする。
0945デフォルトの名無しさん
2007/12/11(火) 12:57:52これはひどいww
これじゃプライベートなデータを全部公開しないと処理ができないじゃないかw
0946デフォルトの名無しさん
2007/12/11(火) 13:06:120947デフォルトの名無しさん
2007/12/11(火) 13:16:31俺、アドインベースが基本だから、シートにコード書くこと今までほとんどなかった。
0948デフォルトの名無しさん
2007/12/11(火) 15:03:180949デフォルトの名無しさん
2007/12/11(火) 16:36:37コントロールのオブジェクト名と値をVBAで
参照することはできますか?
0950デフォルトの名無しさん
2007/12/11(火) 16:49:140951デフォルトの名無しさん
2007/12/11(火) 17:35:17> え、まさかシートのコードモジュールをメインでプログラミングしてたりするのか?
これをやると何か得するのですか?
0952デフォルトの名無しさん
2007/12/11(火) 17:41:36つか、何で俺にそれ聞くの?
0953949
2007/12/11(火) 17:45:13フォームコントロールのオプションボタン1と2を
ブックを開いたとき、クリア(押されてない状態)に
したいのですが、コントロール名がないためやり方がわからなくて・・
後出しですみません。
0954デフォルトの名無しさん
2007/12/11(火) 17:51:110955デフォルトの名無しさん
2007/12/11(火) 18:00:48こいつのプロパティを開いてもコントロールの名前がないのです・・
0956デフォルトの名無しさん
2007/12/11(火) 18:06:52Worksheets(1).Shapes(1) とかでアクセスできる
名前はないからリンクしているセルの番地で特定するとか
つけてるラベル名でやるとか、最悪インデックスを直値でやる
以下はセルA1とリンクしているコントロールを見つけだす例
For Each v In Worksheets(1).Shapes
If v.ControlFormat.LinkedCell = "$A$1" Then
End If
Next v
0957デフォルトの名無しさん
2007/12/11(火) 20:42:340958920
2007/12/11(火) 21:08:22920のその後ですが、ゴリゴリ処理を追加して起動すると、再度エラーが起きるようになりました。
For Each p In ThisWorkbook.VBProject.VBComponents
Debug.Print p.Properties("Name").Name
Next p
ここで、「'Properties'メソッドは失敗しました: '_VBComponent'オブジェクト」のエラーとなります。
しかも、確認のためステップ実行するとエラーは起きません。意味も分からず、試行錯誤の末、
For Each p In Me.VBProject.VBE.CodePanes
s = p.CodeModule.Name
Next p
のように修正したところ、今のところ何故か動いてます。 理屈はまだまだサッパリです・・・。
一応、ご報告まで。
0959デフォルトの名無しさん
2007/12/11(火) 22:15:24まぁ、将来にわたって自分ひとりしか使わないし、シートも追加しないしってことなら止めないが・・・。
0960デフォルトの名無しさん
2007/12/11(火) 22:19:00或る程度、分かってる人みたいなので手抜き
Set objSheet = Excel.Worksheets("ターゲットシート名とか")
For Each objShape In objSheet.Shapes
If objShape.Type = msoFormControl Then
If objShape.FormControlType = xlOptionButton Then
objShape.ControlFormat.Value = xlOff
End If
End If
Next
msoFormControlは結構、有名だと思ったけどそうでもないのね
デタラメこいてクサレコードを教えるヤツも出るぐらいだし(~ε~;)
0961デフォルトの名無しさん
2007/12/11(火) 22:24:050962デフォルトの名無しさん
2007/12/11(火) 22:55:25と思ってググったことはワイヤード以外ではナイショ♥
http://d.hatena.ne.jp/tonotonotono/20060707
0963デフォルトの名無しさん
2007/12/11(火) 23:41:06n AS Integer
(rにはセル範囲が与えられているとして)
n=r.Areas.Columns(1).Count←行数を取得したい
どうすれば行数を取得できるでしょうか?
0964920
2007/12/11(火) 23:42:45ありがとうございます。おかげさまで、考え方が良くないという認識は持てました。
ただ、どうも"何故"という興味が消えなくてw 不具合か、使い方か、追求してみたいです。
ご忠告どおり、個人レベルは超えないようにして、
948さんの考え方等も色々試してみようと思います。 みなさん、ありがとうございました。
0965デフォルトの名無しさん
2007/12/12(水) 00:02:00Set r = Range("a2:d11")
n = r.Rows.Count
Range("a1") = n
0966デフォルトの名無しさん
2007/12/12(水) 00:20:21ありがとうございました。
d AS Variant
n=300←(データ数。可変する)
Redim d(n,2)
(省略)←dにグラフの値を代入する
Chart.add
Activechart.setsource
d←配列データをもとにグラフを作成するにはどうすればよいのでしょうか?
0967デフォルトの名無しさん
2007/12/12(水) 00:25:01shirabenai kara
oshietekun
0968デフォルトの名無しさん
2007/12/12(水) 00:42:13いや、一ヵ月前から調べたが解決できなかったのがたまたまこの2つだったのです。
0969デフォルトの名無しさん
2007/12/12(水) 10:47:08ひょっとして全然違う?
0970デフォルトの名無しさん
2007/12/12(水) 10:58:04とんでもないクサレコードだなおいw
それじゃ手あたり次第に同種のコントロールを設定しちまうだろw
0971デフォルトの名無しさん
2007/12/12(水) 10:59:21じゃあお前が教えてやれ
0972デフォルトの名無しさん
2007/12/12(水) 11:38:33Excel総合相談所 62
http://pc11.2ch.net/test/read.cgi/bsoft/1195214565/522-524
ここら辺でやり取りされてたけど、一緒だと思う。
0973デフォルトの名無しさん
2007/12/12(水) 11:57:42ありがとうございます!
もうひとつ、ついでによろしいでしょうか?
変数を使ったセルの選択で、結合されている場合の
やりかたが分かりません。
Range("B & i : B & i+1").Select: triggerMsg = Selection.Value
もしくは
Range(""B" & i : "B" & i+1"").Select: triggerMsg = Selection.Value
これだと、ダメなんですよね。
0974973
2007/12/12(水) 12:09:48dim range1 as range
Set range1 = Range("B" & i).MergeArea
0975デフォルトの名無しさん
2007/12/12(水) 12:57:10くくってる範囲が違う
Range("B" & i & ":B" & i+1")
0976デフォルトの名無しさん
2007/12/12(水) 13:00:04> d AS Variant
> n=300←(データ数。可変する)
> Redim d(n,2)
> (省略)←dにグラフの値を代入する
>
> Chart.add
> Activechart.setsource
> d←配列データをもとにグラフを作成するにはどうすればよいのでしょうか?
配列データからグラフ作成、以外と難しいね
0977デフォルトの名無しさん
2007/12/12(水) 13:03:16値って、「vbcancel」なのか「false」なのか、どっちですか?
0978973=977orz
2007/12/12(水) 13:06:09ありがとうございます!
こう?
Range("B" & i & ":B" & i + 1).Select
0979デフォルトの名無しさん
2007/12/12(水) 13:07:200980デフォルトの名無しさん
2007/12/12(水) 13:08:47RTFM
0981973
2007/12/12(水) 13:18:44Range("A" & 1 & ":A" & 2).Select: hoge = Selection.Value
MsgBox hoge
End Sub
型が違うって出てしまいます。
結合されたセルの値を取り出すには、
特別な作業が必要なんですかね。
0982デフォルトの名無しさん
2007/12/12(水) 13:43:20VBAの本買ってこい
0983デフォルトの名無しさん
2007/12/12(水) 13:48:02いつまでその調子で質問し続けるつもりだ?
0984973
2007/12/12(水) 13:50:130985デフォルトの名無しさん
2007/12/12(水) 13:53:00一旦選択状態にする意味が分かんない。それすら分かってないレベルなら>>982
まとめて取得したいって意味なら、2次元配列で受け取る方法を考える。
つか、クイックウォッチを見ながらやってみ?
0986デフォルトの名無しさん
2007/12/12(水) 13:53:44もし本を読んだ上で質問していると思うけど、複数冊参考になる本は用意しておくべきだよ。
その本ごとに強調する部分は違うからね。
とりあえず本屋へGo!
0987デフォルトの名無しさん
2007/12/12(水) 13:55:16日本語でOK
0988973
2007/12/12(水) 15:55:32色々やってたら出来ましたぁ
0989デフォルトの名無しさん
2007/12/12(水) 16:25:37> Sub yoyoyo()
hoge AS Range
Set hoge = Range("A1:A2").Value
> MsgBox hoge
> End Sub
0990デフォルトの名無しさん
2007/12/12(水) 16:30:17> >>981
修正。
Sub yoyoyo()
Dim hoge AS variant
Redim hoge(1,2)→行と列は忘れた。
Set hoge = Range("A1:A2").Value
MsgBox hoge
End Sub
0991デフォルトの名無しさん
2007/12/12(水) 16:34:05> ExcelのChartではできません。あきらめましょう。
どおりで一ヵ月ネットで探してもでてこないわけですね・・
ありがとうございました
0992デフォルトの名無しさん
2007/12/12(水) 16:44:290993デフォルトの名無しさん
2007/12/12(水) 16:46:36はよせんと落ちてしまう〜、誰かヨロ
0994981
2007/12/12(水) 16:56:31助かります
0995デフォルトの名無しさん
2007/12/12(水) 17:08:28hogeは2次元配列になっている
Sub yoyoyo()
Range("A" & 1 & ":A" & 2).Select: hoge = Selection.Value
MsgBox hoge (1,1) & vbLf & hoge(2,1)
End Sub
としないと動かない。
だがちょっと待って欲しい。変数の宣言をした方が良いんではないだろうか。
Sub yoyoyo()
Dim hoge As Variant
hoge = Range("A1:A2").Value
MsgBox hoge (1,1) & vbLf & hoge(2,1)
End Sub
とすればSelectしなくても良いのではないかという声が聞こえなくもない。
0996デフォルトの名無しさん
2007/12/12(水) 17:24:03だったら
Sub yoyoyo()
Dim hoge As Variant
hoge = Range("A1").Value
MsgBox hoge (1,1)
End Sub
0997デフォルトの名無しさん
2007/12/12(水) 17:26:180998デフォルトの名無しさん
2007/12/12(水) 17:29:35http://pc11.2ch.net/test/read.cgi/tech/1197448064/
0999デフォルトの名無しさん
2007/12/12(水) 17:32:23Sub yoyoyo()
Dim hoge As Variant
hoge = Range("A1").Value
MsgBox hoge
End Sub
MsgBox Range("A1").Value
の1行でもいいぞ。
10001000get
2007/12/12(水) 17:45:26結合されていると、なぜかselect後の値取得が
使えないんです。
range("A1").select:hoge=selection.value
はエラーになる。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。