10/02/22 10:08:10
>>368
その辺りを、調べてみますありがとうございました。
370:デフォルトの名無しさん
10/02/22 10:09:25
テキストボックスにInteger型のデータと文字列を結合して表示させたいのですがどう打ち込めばいいでしょうか?
イメージ的には
textbox1.text = integer型のデータ + "文字列"
としたいのですが
371:デフォルトの名無しさん
10/02/22 10:14:05
>>370
integer型のデータ & "文字列"
じゃ駄目か?
372:デフォルトの名無しさん
10/02/22 11:02:40
>>371
出来ました
ありがとう
373:デフォルトの名無しさん
10/02/22 12:56:33
ソートの話の続きなんだけど、
一次配列100個の右4文字を昇順でソートするっていう場合は記述するしかないんじゃない?
374:デフォルトの名無しさん
10/02/22 14:36:56
>>373
セルに入れたくないならそうだろうね
でもエクセルを使ってるからには
どのみちセルにぶち込むデーターなんだろうし
右4文字を取り出した列を作ってやればいいんでない?
375:デフォルトの名無しさん
10/02/22 18:47:48
なぁ、EXCEL2000から2007に最近環境を変えなきゃならんオレに
表示とか環境設定みたいなのどうしてるか教えろ。
取り敢えず立ち上がったところから気に喰わないし自作DLLは変な文字吐くし泣けるんだわ。
他のスレで聞いてもいいんだけどVBA使ってる人に聞いてみたいんだ。
デフォルトのに慣れろってんならそうする。
376:デフォルトの名無しさん
10/02/22 19:49:33
>>375
2003と同じツールバーを出すサードパーティーのアドインがあったよ
即効で使わないといけないならとりあえずこれ
最近チェックしてないのでなくなってたらゴメン
2007に移行した人に聞いてみたら慣れたら2007のほうが使いやすいって言ってたので
時間的余裕があるなら耐えて使うかなw
うちもまだ2003でふんばってまふ
377:デフォルトの名無しさん
10/02/22 19:54:38
Office 2007にOffice 2003互換メニューを追加する
URLリンク(www.atmarkit.co.jp)
↑を入れてるw
378:デフォルトの名無しさん
10/02/22 20:40:31
まあ、2010も同じ形式なので、諦めて慣れた方がいいような気もするけどね
379:デフォルトの名無しさん
10/02/22 21:05:50
とっくの昔に2007になれた。
2007のほうが使いやすいんだが、周りの全員がオレに聞いてくるのでうっとうしい。
380:デフォルトの名無しさん
10/02/22 21:06:21
>>376-378
サンクス
フリーのアドイン見てみたけど、MSは基本このまま使えって言ってるって事みたいだね。
最初見たときマジでOOoに乗り換えようかと思ったわ。
XPの頃のPCがそろそろ更新のサイクルに来てると思うんだけど乗り換える人もある程度出てくるんじゃね?
まああ、VBA関連のコードも書き換え(1から作り直し?)無きゃならんしオレがUIに慣れる方向でやってみて、
同僚の反応とか聞きながらこの先の事は考えてみるわ。
381:デフォルトの名無しさん
10/02/22 21:23:19
>>379
そらそうだろ。知ってるやつ居るならオレも聞きたいわwww
てか、どのくらいで慣れるのか聞きたいわ。
あと、DLLのインタフェースにXML使うの実装しといたの思い出したらなんとかなった。
とにかくサンクス。
382:デフォルトの名無しさん
10/02/22 22:43:46
2003と2007の両方入れてる
常用は2007なんだけどマクロの記録がタコなんでどうしても2003は消せない
UIは慣れるしかない
383:デフォルトの名無しさん
10/02/22 23:04:21
>>364
アクティブでないアプリケーションの処理が遅くなるのはWindowsが
そういう風にCPU処理を配分してるからでしょ。システムのプロパティで
裏のプログラムも同等に処理するように設定したら?
その代わりアプリが表側に来てるときの処理速度は落ちるけど
PCの性能が無限でない以上仕方ない。
384:デフォルトの名無しさん
10/02/23 00:30:51
>>383
デュアルコアだと快適になるかな?
385:デフォルトの名無しさん
10/02/23 05:51:45
ダブルクリックで複数立ち上げるとエクセル本体は一つしか立ち上がらないので
マルチCPUでも一つのコアしか使ってくんない
スタートメニューからエクセルを必要数起動しエクセルからシートを読み込んでやると
別プロセスで動くので各コアに分担させることが可能
割り振りはたすくマネージャから手動で変更可
これでどれだけ快適になるかはやってみなきゃわかんない
よほど処理時間長いものじゃなきゃごちゃごちゃやってる間に終わっちまうしな
386:デフォルトの名無しさん
10/02/23 12:32:43
指定のzipファイル内にあるcsvファイルを配列に落とすにはどうしたらよいでしょうか
配布の都合上外部DLLは使用出来ません
387:デフォルトの名無しさん
10/02/23 18:06:44
自己解凍ファイルにするとか
388:デフォルトの名無しさん
10/02/23 18:54:41
>>386
きっとそのzipファイルは変えられないんでしょ。
XPならzipって標準でライブラリなかったっけ?
外部dllには違いないけど、それ読み込んで解凍させるとか。
389:デフォルトの名無しさん
10/02/23 19:15:51
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
390:デフォルトの名無しさん
10/02/23 21:26:22
OS:windows
Excelバージョン:2003
条件付き書式を設定していくマクロについて質問です.
[問題]
C1:E3の各セルに文字 aもしくはbもしくはcが入力されているとします.
このときA1のセルにa,A2のセルにbが入力されたとき
C1:E3の各セルでaもしくはbが入力されているセルのみ背景を赤にしたいのですが
どうすればよいでしょうか?
[自分なりの解答]
以下のような条件付き書式を各列で設定していくマクロを作ってみたのですが、
$C$1のところが$C$1~$E$1とすることができず詰まっています...
Do Until ActiveCell.Value = ""
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF($A$1:$A$2,$C$1)>=1"
Selection.FormatConditions(1).Font.ColorIndex = 2
Selection.FormatConditions(1).Interior.ColorIndex = 3
ActiveCell.Offset(1).Select
Loop
End Sub
391:デフォルトの名無しさん
10/02/23 21:58:13
こういうことか?
Sub test()
Dim i As Integer, j As Integer
For i = 1 To 3
For j = 3 To 5
If Cells(i, j) = Cells(1, 1) Or Cells(i, j) = Cells(2, 1) Then
With Cells(i, j)
.Font.ColorIndex = 2
.Interior.ColorIndex = 3
End With
End If
Next j
Next i
End Sub
392:デフォルトの名無しさん
10/02/23 22:27:24
>>390
よくわかんないけど
Sub testestes()
Dim myRange As Range, r As Range
Set myRange = Range("c1:e1")
myRange.FormatConditions.Delete
For Each r In myRange
r.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF($A$1:$A$2," & r.Address & ")>=1"
r.FormatConditions(1).Font.ColorIndex = 2
r.FormatConditions(1).Interior.ColorIndex = 3
Next r
End Sub
393:デフォルトの名無しさん
10/02/23 22:43:53
>>390
条件付き書式を間違ってないか
C1は=COUNTIF(A1:A2,C1)>=1で
E1は=COUNTIF(A1:A2,E1)>=1といれるべきだと思う
394:デフォルトの名無しさん
10/02/23 22:52:26
>>391-392
レスありがとうございます.
お二人のおかげで作りたいものができました.
勉強になりました.本当にありがとうございます.
>>393
レスありがとうございます.
ご指摘のとおりです.
>>392さんのレスに有る
> & r.Address &
のような方法を探してました.
395:345,358,364
10/02/24 00:55:58
レスくれた方ありがとうございます。
上手く伝わりませんが、>>345で書いた通り、
PCはデュアル又はクアッドコアで、システムのパフォーマンスオプションはバックグラウンドサービスに設定。
エクセルを複数起動して並列処理しており、ウィンドウが表でも裏でも全て高速動作してる。
画面更新や再計算停止等の高速化は実施済み。
ただし、VBAコードの中にSortメソッドが含まれており、かつ非アクティブウィンドウである場合に限り、Sortメソッドの処理が極端に遅くなる。・・・という事です。
>>385の方法をスクリプトで自動化してるので、Core i7でExcel2000を8つ起動して同じコードを走らせると8コア100%までぶん回して高速に演算できてるけど、
Sortメソッドを使うとそこが激しくボトルネックになる。
ちなみに普通にエクセルを1つだけ開いてSortを何万回も繰り返すコードを実行中に、デスクトップをクリックしてエクセルを非アクティブにするだけでも途端に劇遅になる。
これ多分Excel2000の仕様というかバグなんだけど、同じ現象についてはググっても見つからなかったので、これが問題になるほど何時間もぶん廻す使い方がよほど特殊なんだろう。
Sortメソッドを使わない方向で解決する事にします。
396:デフォルトの名無しさん
10/02/24 19:57:09
すみません教えて欲しいんですが
SET A = Range("B1:E10")
SET X = Range("C5")
のような時に
単一セル X はセル範囲 A の 範囲内にあるかどうかの
判定方法はどうやったらよいのでしょうか?
397:デフォルトの名無しさん
10/02/24 20:01:38
intersect
398:396
10/02/24 20:05:39
>>397
あ!なるほど
ありがとうございました
399:デフォルトの名無しさん
10/02/24 20:53:23
>>395
何がやりたいのか判らないけどアクセス使ったほうがいいんじゃないか?
それはさておき、こことか。
URLリンク(chotosplus.sakura.ne.jp)
400:デフォルトの名無しさん
10/02/25 04:03:34
すみません、教えていただけないでしょうか
OS:windows
Excelバージョン:2003
反復型の成績判定で10人分の得点を一人ずつ成績判定を行うプログラムを作りたいのですが、
Sub 反復型の成績判定()
Dim X As Variant
X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68)
Dim hantei As Variant hantei = Array("不可です", "可です", "良です", "優です", "対象外です")
Dim h As Integer
Const n As Integer = 10
Dim i As Integer
Dim tokuten As Integer
For i = 1 To n
tokuten = X(i - 1)
Next
Select Case tokuten
Case Is < 60
Debug.Print Format(tokuten, "#点は ") & Format(hantei(0), "不可です")
Case Is < 70
Debug.Print Format(tokuten, "#点は ") & Format(hantei(1), "可です")
Case Is < 80
Debug.Print Format(tokuten, "#点は ") & Format(hantei(2), "良です")
Case 80 To 100
Debug.Print Format(tokuten, "#点は ") & Format(hantei(3), "優です")
Case Else
Debug.Print Format(tokuten, "#点は ") & Format(hantei(4), "対象外")
End Select
End Sub
これだと68点の成績判定しかされないのですが、どこを直せば良いのでしょうか?
401:デフォルトの名無しさん
10/02/25 06:16:13
>>400
nextを end select の後に移動
402:デフォルトの名無しさん
10/02/25 06:21:10
>>400
Sub 反復型の成績判定()
Dim X As Variant
Dim element As Variant
Dim hantei1 As Variant
Dim hantei2 As Variant
Dim h As String
X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68)
hantei1 = Array(0, 60, 70, 80, 101)
hantei2 = Array("不可です", "可です", "良です", "優です", "対象外です")
For Each element In X
h = WorksheetFunction.Lookup(element, hantei1, hantei2)
Debug.Print Format(element, "#点は ") & h
Next
End Sub
403:デフォルトの名無しさん
10/02/25 07:27:05
え!?hentai???と思ってしまった・・・orz
404:デフォルトの名無しさん
10/02/25 12:04:56
できました!
助かりました。ありがとうございます。
405:デフォルトの名無しさん
10/02/25 12:14:46
すみません、もうひとつ聞きたいことがあるんですが、
星の表示で1~n個の*を順番に表示させるプログラムをつくったんですが、
Sub 星の昇順表示()
'1 ~ n個の”* ”を順番に表示
Dim i As Integer, n As Integer
n = 10
Do
Debug.Print Format(i, "00") & String(i, "*")
i = i + 1
Loop While i < 11
End Sub
これをn~1個の*を順番に表示させるためにはDo~Loopを使ってどのように変えればいいのでしょうか?
教えていただけないでしょうか。
406:デフォルトの名無しさん
10/02/25 12:45:59
>>405
初期値
加算値
終了条件
宿題け?
407:デフォルトの名無しさん
10/02/25 17:48:25
Dim y As Integer
Dim x As Integer
Dim objTableItem As Object
'.body ‚loop body data
For Each objTAG In objIE.document.body.all
'search for table tag
If objTAG.tagName = "TABLE" Then
'add new sheet
Sheets.Add
y = 0 'row
'loop item in table
For Each objTableItem In objTAG.all
If objTableItem.tagName = "TR" Then
y = y + 1 'row +1
x = 1 'columm=1
End If
If objTableItem.tagName = "TD" Then
'set text data
Cells(y, x) = objTableItem.innerText
x = x + 1 'next columm
End If
Next
End If
Next
このままだと、Excelを使ったIE操作に関する質問です。
website上のテーブルをコピーして、エクセルにペーストしたいのですが、このままではテキストにリンクが貼られていても、
テキストしかコピーできません。
例えば、<a href ="http.....">VBA</a>の場合、テキストのみがペーストされますが、エクセル上でVBAをクリックすると、URLにジャンプできるようにしたいのですが、何かいいアイディアはございますか?
408:デフォルトの名無しさん
10/02/25 18:58:19
>>406
回答ありがとうございます。
すみません、具体的にはどこをどう変えればいいのでしょうか。
本当に初心者なので、どこをどういうふうに変えたら*の数が下がるようになるのかわからないんです。
409:デフォルトの名無しさん
10/02/25 22:22:30
>>407
If objTableItem.All.tags("A").Length > 0 Then
Debug.Print objTableItem.All.tags("A")(0).href
End If
で
http.....
が取得できると思うけど
410:デフォルトの名無しさん
10/02/25 23:46:43
>405
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
411:デフォルトの名無しさん
10/02/26 00:30:18
ユーザーフォーム上のテキストボックスに前のデータを表示させたまま下に出力し続けることは可能でしょうか?
412:デフォルトの名無しさん
10/02/26 00:58:33
>410
仰るとおりです。本当に申し訳ありません。
ただ、時間がなくプログラムもどう変えればいいか全然わからず、丸投げしてしまいました。
厚かましいお願いではありますが、初心者でもわかる範囲でヒントをもらえないでしょうか。
見よう見まねで上のプログラムは組めたんですが、反対に星の数を少なくしていくやり方がどうしてもわかりません。
どうかよろしくお願いします。
413:デフォルトの名無しさん
10/02/26 01:52:16
>>408
なんかの宿題だろうけど
見よう見まねだとしても
>>405の コードでなぜ星の数が多くなっていくのか
それを理解するのが先だと思う
じゃあ逆に質問
1~5個の"*"を順番に表示にするには?どう修正する?
実行結果は下ね
01*
02**
03***
04****
05*****
ちなみに下だと失格だよ
00
01*
02**
03***
04****
05*****
414:デフォルトの名無しさん
10/02/26 02:06:08
>>412
i = 10
i = i - 1
i > 0
415:デフォルトの名無しさん
10/02/26 02:41:02
Dim i As Integer, j As Integer, n As Integer, s As String
n = 10
For i = 1 To n Step 1
s = Format(i, "00")
For j = 1 To i Step 1
s = s & "*"
Next j
Debug.Print s
Next i
End Sub
そういえば、iとかjとか一文字の変数名はよくないって話はどうなってんの
416:デフォルトの名無しさん
10/02/26 03:02:49
>414
できました!助かりました!本当にありがとうございます。
>413
i = 1 という条件を付け加えればよかったんですね!
一人じゃ何もわからず、途方にくれていました。本当に助かりました。
ありがとうございました。
417:デフォルトの名無しさん
10/02/26 08:18:56
>>415
変数名1文字なんてどうでもいい
それよりループ回してs=s&"*"なんて恥ずかしいからやめろ
>>405さえString関数使ってるだろ?
418:415
10/02/26 09:54:18
なんで?
01*
02*+
03*+*
04*+*+
05*+*+*
こういうのやる時必要でしょ?
419:デフォルトの名無しさん
10/02/26 11:01:47
>418
ヲイヲイ・・・
420:デフォルトの名無しさん
10/02/26 11:23:13
For文で変数にiとjを使うのは昔からの慣習なので問題ない
421:デフォルトの名無しさん
10/02/26 15:39:29
時間がないと言ってるのに>>413はちょっとかわいそうだとオモタ
422:デフォルトの名無しさん
10/02/26 19:40:12
名簿から名前(アルファベット)を拾って
頭文字別の一覧表シートを作成しようとしています。
ソート後に頭文字を
if str[i] == str[i+1]
hoge列に代入
elseif str[i] != str[i+1]
hoge = hoge+1
hoge列に代入
という方法でやろうと思ってるんですが
(if a ~ if z では長くて面倒ですし・・)
他に方法というかVBA側で用意されてるものってあったりしますか?
リスト構造体的なものがあってそこに文字列ぶちこんで
検索文字抽出→GetNextで抽出文字列を順々に引っ張り出せたりとか・・
そういったものがあったりしないかなぁと思い質問させていただきました。
423:422
10/02/26 19:43:33
== → =
!= → <>
に訂正します。
比較演算子がC++になってしまいました・・
424:デフォルトの名無しさん
10/02/26 21:19:44
>>422
(if a ~ if z では長くて面倒ですし・・)
の部分が何が言いたいのかよくわからん。
例示されたプログラムのどこにも出てきてないのに、いったい何がやりたいんだ。
425:デフォルトの名無しさん
10/02/26 21:36:06
>>422
1Byte文字かつアルファベットのばあい。
文字列の先頭1文字の文字コード(アスキーコード)取得して適当に計算して
Cell位置に変換してそこにぶち込む。をLoopすれば?
カラム方向のカウンタも配列にして。
426:422
10/02/26 22:06:04
>>424
if str[i] like "Aa" ~ if str[i] like "Zz"
ということでした。わかりづらくて申し訳ありませんでした
>>425
やはりLoopで回すのが手っ取り早そうですね。
ありがとうございます。
427:デフォルトの名無しさん
10/02/26 22:22:51
>>417
別にええやんと思う人間が実はここにもいる。
性能的な違いはある?
428:デフォルトの名無しさん
10/02/26 23:57:22
>417
>それよりループ回してs=s&"*"なんて恥ずかしいからやめろ
途中の結果も必要なんだから別に恥ずかしいとは思わんが・・・
429:427
10/02/27 01:21:43
あ、文字列を作るためだけにループ使うなと言いたいのか。
でもString関数なんて今まで知らなかったよ。
ところで文字を連続させる関数て何に使うんだろうか。
430:デフォルトの名無しさん
10/02/27 08:35:11
>>429
文字を連続させるために使う。
431:デフォルトの名無しさん
10/02/27 08:55:01
使いたい人が使いたいときに使う。
例えば*を100個書きたい場合(101個だとダメ99個でもアウト~)に
String()を使えば間違わないで書けるとかじゃろ?
432:デフォルトの名無しさん
10/02/27 09:38:38
worksheetfunction に rept ってなかったっけ?
433:デフォルトの名無しさん
10/02/27 13:13:17
だめだ、同じ文字を10個ならべる目的が思いつかない。
固定だったら"**********"とか書くし需要少なそうだ。
まあ、あるものは使った方がいいのは確かだと思う。
String関数の中でループ処理が組んであるんだろう。
434:デフォルトの名無しさん
10/02/27 13:42:12
バリアント型 (内部処理形式 String の Variant) の値を返します。
指定した文字コード (ASCII またはシフト JIS コード) の示す文字、または文字列の先頭文字を、
指定した文字数だけ並べた文字列を返す文字列処理関数です。
Dim MyString
MyString = String(5, "*") ' "*****" を返します。
MyString = String(5, 42) ' "*****" を返します。
MyString = String(10, "ABC") ' "AAAAAAAAAA" を返します。
435:デフォルトの名無しさん
10/02/27 13:49:08
ForとString()じゃパフォーマンスが段違いに違う。
String(999999999,"*")は一瞬で処理されるのに対し、ForはExcel自体がフリーズする。
436:デフォルトの名無しさん
10/02/27 13:49:20
>>433
目的ですか、うちでよく使うのは
その1、ダミーデーター作成(スペースでいい場合はspace()を使うけど)
1.1、固定でも200個とか数えるのやだし
1.2、固定長データを扱うときにあまった領域の埋め草を作るのに使う
その2、CUIで棒グラフ
あとは、なんだろうね、なにかあったような気がするが思い出せない
437:デフォルトの名無しさん
10/02/27 13:50:37
たとえば
あるLoop処理でc言語のTableを作るとかの場合に、
タブを何個挿入するのかをブレイスの深さで変えたい場合、
ブレイスの深さをカウンタにしておけば少し便利かも。
タブじゃなくてスペース4個とかでも同じ。
String(i, Chr(9)) & StringBuff & vbLf
438:デフォルトの名無しさん
10/02/27 13:50:43
ごめん9が1個多かった
439:デフォルトの名無しさん
10/02/27 14:44:21
なるほど、固定長データを埋めるときという例はすごくよく判ったし
パフォーマンスが全然違うんだね。ありがとう。
生の固定長データを自分で作ったことが多分ないから気づかなかったよ。
440:デフォルトの名無しさん
10/02/27 16:02:28
だんだん文字列を大きくしていくのはメモリ確保に時間がかかるからやらないのが常識。
サイズが小さいうちは平気だけどね。
441:デフォルトの名無しさん
10/02/27 17:45:33
それは何nsの話なのか
442:デフォルトの名無しさん
10/02/27 18:39:18
小さいうちは数ナノ秒でも大きくなると幾何級数的に時間がかかるよな。
443:デフォルトの名無しさん
10/02/27 20:11:25
excel2003を使用しています。
ファイルを外部から取り込む際に、ダイアログを使用していますが、
この取り込むときのフィルターのかけ方で、特定の文字列を含むファイルのみ表示することは可能でしょうか?
Filter = "エクセルファイル(*.xls)" & Chr(0) & "*.xls" & Chr(0)
現状はこの様になっており、拡張性がエクセルファイルのものだけを表示するようになっています。
これに特定の文字列を持ったファイル名を表示するという条件を追加できませんか?エクセルファイルで、名前が091201を含むなど
444:デフォルトの名無しさん
10/02/27 20:13:24
>>441
性能問題起こしそう
445:デフォルトの名無しさん
10/02/27 20:16:35
"09*.xls"
446:デフォルトの名無しさん
10/02/27 20:53:18
まぁ、スピードが要求されるならC++でDLL書いてVBAから呼べって話になるんですがね
447:デフォルトの名無しさん
10/02/27 22:02:08
そういう問題じゃねーのまだ分ってねーの
計算量のオーダが2乗ってことだよ
448:デフォルトの名無しさん
10/02/27 22:04:49
ほら
1+2+3+...+n=n(n+1)/2=n**2+1/2*n
449:デフォルトの名無しさん
10/02/27 22:28:51
流れを無視してすみません
VBA初心者ですが質問させてください
Userformでの話なのですが
ボタンが押された際に
TextBoxにセルの値を代入し表示
2秒間隔をあけ、その後フォームを閉じる
という処理を行いたいのですがTextBoxに表示される前にフォームが閉じられてしまいます。
フォームが閉じられる前にTextBoxにテキストを表示させるにはどのような方法をとればいいのでしょうか?
サンプルコードは以下のとおりです。
Private sub CommandButton1_Click()
TextBox1.text = sheets("sheet1").range("A1").value
call delay(2) '2秒ディレイするという命令
Unload Me
endsub
分かりづらいコードで申し訳ないですがご指導のほどお願いいたします。
450:デフォルトの名無しさん
10/02/27 22:40:23
>>445
ありがとうございます!!
451:デフォルトの名無しさん
10/02/27 22:43:48
どうしてもその自作関数つかうなら
delayのほうに
閉じる動作書けばいんじゃね
452:デフォルトの名無しさん
10/02/27 23:09:19
>>447
.NET Framework使えよって話だ
453:デフォルトの名無しさん
10/02/28 00:17:06
>>449 ontime
454:デフォルトの名無しさん
10/02/28 00:40:48
VBAで指定されたURLに日本語をくっつけてWebを開く事は出来ますが
そうではなくて
開いたWebページのあるテキストボックスに選択されたセルにある文字列を入力して
ボタンを押下する方法とかはあるのでしょうか?
もしあればご教授お願いします
455:デフォルトの名無しさん
10/02/28 01:10:19
>>454
Sendkeys
456:デフォルトの名無しさん
10/02/28 11:21:20
>>449
DoEvents を使ってみるといいかも
TextBox1.text = sheets("sheet1").range("A1").value
DoEvents
call delay(2)
Unload Me
457:デフォルトの名無しさん
10/03/01 01:46:21
テキストファイルA.txtの内容をstrAとし、
テキストファイルB.txtの内容をstrBとし、2つを合体させて
クリップボードにコピーしようとしています。
strA も strB も、それぞれ読み取れてはいるのですが、
strA & strB とすると前者の方しかコピーされません。
逆にしても同じです。
&でつなぐことはできないのでしょうか?
458:デフォルトの名無しさん
10/03/01 02:42:09
>>457
よくわかりませんが、先に
strAB = strA & strB
したり、そこで文字列結合関数を使ってみては?
459:デフォルトの名無しさん
10/03/01 19:14:57
nul文字混入
460:デフォルトの名無しさん
10/03/02 22:00:35
Worksheets("225構成銘柄(業種別分類)").Range(Cells(2, 1), Cells(2, 2)) = Worksheets("水産").Cells(3, 3)
これでアプリケーション定義またはオブジェクト定義のエラーです。が出るのは何でだ?
もしかしてシートまたいでのコピーっていちいちactiveにせないかんの?
簡略表記できないの?
461:デフォルトの名無しさん
10/03/02 22:50:10
>>460
1.
Worksheets("225構成銘柄(業種別分類)").Activate
Range(Cells(2, 1), Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value
2.
With Worksheets("225構成銘柄(業種別分類)")
.Range(.Cells(2, 1), .Cells(2, 2)).value = Worksheets("水産").Cells(3, 3).value
End With
3.
Worksheets("225構成銘柄(業種別分類)").Cells(2, 1).Resize(1, 2).value = Worksheets("水産").Cells(3, 3).value
お好きなのをどうぞ
462:デフォルトの名無しさん
10/03/02 23:22:41
なんか納得いかないけどありがとう御座います。
とくに2なんかwithで囲っただけでなんで上手く行くんだ?
463:デフォルトの名無しさん
10/03/02 23:52:33
>>462
RangeやCellsはシートを指定しないとアクティブシートを対象とする。
そのため460の書き方では、CellsのシートとRangeのシートが一致していない。
461の.Cellsはドッドが付いているため.Rangeと同シートを対象としているので動く。
と正しくないかもしれないけど勝手解釈な説明をしてみた。
464:デフォルトの名無しさん
10/03/03 08:47:09
>>457
(strA & strB)
としてはどうか
465:デフォルトの名無しさん
10/03/03 16:46:26
>>463
ふんわりと勉強になった。
知らん事だらけで困惑する。
466:デフォルトの名無しさん
10/03/03 20:11:36
簡単に言うと、
Cells(2, 1), Cells(2, 2)
ってのが、どこのシートのセルか指定されてないってことね。
467:デフォルトの名無しさん
10/03/03 21:25:06
現在VBAでエラーが出た場合
On Error GoTo ErrorHandler
ErrorHandler:
MsgBox "エラーが発生しましたので終了します"
のように強制的に終了させていますが
これだとどこでエラーが起こったのかわかりません。
しかしこれをはずすとVBAの画面が出てきてしまうのでそれは何としても避けたいのですが
いわゆる実際の開発現場での作業などで作成される場合、
一般的にデバッグってどうやってされているのでしょうか?
たとえば通過ログを各地にはりつけてこのログが通って、このログが通っていないので
その間で落ちたと言うやり方が思いつくのですが、
あるいはこの部分で落ちたとかがわかるコードなどあるのでしょうか?
468:デフォルトの名無しさん
10/03/03 21:32:39
>>467
Debug.Assert(条件文)
469:デフォルトの名無しさん
10/03/03 21:40:30
Err.Description じゃなかったっけ?
それみてエラー箇所が特定出来ないなら関数が大きすぎるんじゃないか?
470:デフォルトの名無しさん
10/03/04 00:22:40
>>467
とりあえずErrオブジェクトでぐぐれ
エラーの発生した場所を正確に知るにはErl関数を使うという手もあるが
使い方がかなり面倒なのでおすすめはしない
471:デフォルトの名無しさん
10/03/04 00:28:40
ちがう
Err.LineNumber
472:デフォルトの名無しさん
10/03/04 01:06:17
>>467
VBEのメニューバーにそのものずばり「デバッグ」てのがあるでしょ
いちいちソースを書き換えなくても、どこまで実行したら一時停止とかできるんだよ
473:デフォルトの名無しさん
10/03/04 16:44:12
>>471
ErrオブジェクトにLineNumberなんてプロパティある?
474:デフォルトの名無しさん
10/03/04 20:12:54
Excelにプルダウンを入れていて、いくつか選択肢を入れているのですが
Excelを最初開いた時には空白で
別のシートを選択して、またこのシートに戻ってきた時に表示されます
これの原因ってわかりますでしょうか?
初期化がうまくいっていない気がしますが
どうしても理由が分かりません
ちなみにコードとしては
VBAプロジェクトの同じシートの中に下記の記述を入れています
Private Sub Worksheet_Activate()
With Me.Director_Combo
.Clear
.AddItem ""
.AddItem "あああ"
.AddItem "いいい"
.AddItem "ううう"
.ListIndex = 0
End With
End Sub
475:デフォルトの名無しさん
10/03/04 20:22:51
>>474
ThisWorkbookのWorkbook_Openイベントに記述する
シートの指定を忘れずに
476:デフォルトの名無しさん
10/03/04 21:48:31
ある文字列中に.が何個あるか出力したいんですけど、どうすればいいですか?
例えば"1.25.30.2"ならば3を出力したいです。
477:デフォルトの名無しさん
10/03/04 21:59:28
>>476
単純に思いついたコードなんで間違ってたらすまん
Dim wkArr() As String
wkArr = Split("1.25.30..", ".")
MsgBox UBound(wkArr)
478:デフォルトの名無しさん
10/03/04 22:11:36
あんまりスマートじゃないな
s = "12.34.56.."
Debug.Print Len(s) - Len(Replace(s, ".", ""))
479:デフォルトの名無しさん
10/03/04 22:30:41
>>478
なるほど。LenとReplaceを組み合わせるんですね。
どうもありがとうございます。
480:デフォルトの名無しさん
10/03/07 00:01:38
Sheets(intS).Activate
ActiveSheet.Range("C3:C100").AutoFilter Field:=1, Criteria1:=ANAME
Range("C100").Select
Selection.End(xlUp).Select
If Selection.Value <> "あああ" Then
Range(Selection.Offset(0, -2), "E4").Copy
Sheets(intB).Activate
Range("C100").Select
Selection.End(xlUp).Select
If Selection.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
End If
ActiveSheet.Paste ←
End If
Selection.AutoFilter
矢印の部分でWorkSheet クラスの Paste メソッドが失敗しましたのエラーになってしまいます。
* Microsoft Visual Basic for Applications (VBA) マクロで、Excel 2003 ブックの 1 行全体のコピーと貼り付けを実行している。
* Microsoft VBA マクロで、Excel 2003 ブックの 2,516 以上の行の範囲のコピーと貼り付けを実行している。
のどちらにも当てはまっていないと思うのですが、なぜでしょう。
481:デフォルトの名無しさん
10/03/07 00:03:56
ごめんなさい書き忘れました。
Windows7 Office2007 です
482:デフォルトの名無しさん
10/03/07 08:20:54
やってはいけないの見本
483:デフォルトの名無しさん
10/03/07 09:46:48
>>480
コピー元かコピー先のどちらかでセルが結合されてない?
484:480
10/03/07 17:31:48
セルの結合はないです。
PasteSpecialでも同様のエラーが出ます
485:デフォルトの名無しさん
10/03/07 19:38:09
VBAを利用して
Webページにある複数のテキストボックスに
A1セルに書かれている内容をWeb上のAというテキストボックスに入力
A2セルに書かれている内容をWeb上のBというテキストボックスに入力
するような物を作りたいのですが
やり方とかあるのでしょうか?
あれば教えてください
486:デフォルトの名無しさん
10/03/07 20:22:08
>>485
IEオブジェクト.Document.フォーム名.テキストボックス名.value = 設定したい内容
フォーム名やコントロール名が無い場合
DocumentオブジェクトのFormsコレクションやItemコレクションを使う
IEオブジェクト.Document.Forms(n).Item(n).Value = 設定したい内容
487:デフォルトの名無しさん
10/03/07 21:56:28
A~E列を下記。A,Dを検索キーとしてBをEに移します。
test()では1が拾えず10を拾ってしまいます。(XP, Excel2000)
どう修正すればよいでしょう。
A B C D E
-- -- -- -- --
1 あ __ 1
2 い __ 2
3 う __ 3
9 け __ 9
10 こ __ 10
11 さ __ 11
14 せ __ 14
15 そ __ 1
Sub test()
Set myRngA = Range("A1:A15")
Set myRngD = Range("D1").CurrentRegion
For i = 1 To myRngD.Rows.Count
myKey = myRngD.Cells(i)
Set myCel = myRngA.Find(what:=myKey)
If Not myCel Is Nothing Then
myRngD.Cells(i, 1).Offset(0, 1) = myCel.Offset(0, 1)
End If
Next i
End Sub
488:デフォルトの名無しさん
10/03/07 22:49:54
>>487
Set myCel = myRngA.Find(what:=mykey, LookAt:=xlWhole)
489:デフォルトの名無しさん
10/03/07 22:54:31
大量の日付+株価の四本値データ(1まとまりで5列使用)があるのですが、開始日も終了日も全てバラバラ(最長の奴で8192日データ。この8192日の中に全ての期間入ってる)
綺麗に日付の行をそろえて昇順でソートしたいのですが、VBAで上手いことやるアイデアを下さい。
490:デフォルトの名無しさん
10/03/07 23:29:40
>>489
ソートするって、四本値データが日付順にならんでないというのが不思議だが
同じ日付を同じ行に持ってきたいということかな?
もしそうなら
ビンソートでデータをビンに詰め終わったところで
空きビンに対応する日付データーを入れてやればいいんでないかな
491:487
10/03/07 23:38:31
>488
ありがとう。たすかりました。
LookAt:=xlWholeがないと、一行目が無視されるわけですね?
492:デフォルトの名無しさん
10/03/08 01:24:39
>>491
全然違う。
LookAt=xlWholeは完全一致。
これを書かないと初期状態ではLookAt:=xlPartの部分一致になる。
開始セルのAfter:=***を書かないと範囲の先頭の次から検索するので
部分一致で10がヒットすることになる。
493:489
10/03/08 01:37:33
ビンソートという用語初めて知った。情報有難う。
ソート自体は簡単なんだけど、データのスタート位置設定するの難しいわ。
日付が素直に+1日づつなら多少は簡単なんだけど、休場日とかのせいで日付が飛び飛びなのがうっとうしい・・・
後学の為にVBAで処理したいけど、もう手作業でやるか?
494:デフォルトの名無しさん
10/03/08 01:57:54
SQL使えよ
495:デフォルトの名無しさん
10/03/08 12:36:05
SQLもビンソートも不明だったので。
①→一番長い日数入ってる列探して基準にする
②→各銘柄からデータ取得開始日とって、基準を参考に貼り付け開始行を取得
③→貼り付け開始行を利用して切り取り貼り付け
④→②から繰り替えす
みたいな普通の力技でなんとかしました。アドバイス貰ったのに全く生かせないでごめんなさい。
496:デフォルトの名無しさん
10/03/08 13:37:07
オートシェイプの検索アドインを業務の補助として作成中です。
一般的な実装はできましたが、よくばって検索値の前回値を使用できるようにしたい。
このような場合、前回値をどこに保存するのが一般的なのでしょうか?
excelマクロ・xlaならではの保存方法等ないでしょうか?
ないのであれば、別途保存用のシートに保存するか、またテキストファイル等に残します。
(あんまりエレガントじゃないきがして嫌です。)
ご存じの方おりましたらご享受ください。
497:デフォルトの名無しさん
10/03/08 13:58:58
>>495
ビンソートよりもバケット(バケツ)ソートという名前のほうが一般的かもしれない
内容は
日付のラベルが付いたビンに対応するデーターを放り込んで
詰め終わったら、端から順に取り出す
今回はデータがもともと順並びしてるので、
結果的にあなたがエクセル上でやったことと同じ作業ですね
498:デフォルトの名無しさん
10/03/08 14:06:04
>>496
Excelはシートに保存するのがエレガントだと思います。
499:デフォルトの名無しさん
10/03/08 15:39:54
なんらかの関数で引数となるシート名が存在するかチェックしてるんだが
シート数分Forでまわして同名シート見つけた時点でexitしてるんだけど
シート枚数が多くて使用者のPCスペックが低いためか時間が結構かかってきているんだが
なんかアドバイスない?
さしあたって事前にシート名チェックするのやめて
ダメならOn Error GoToで飛ばすようにしといたんだけど
もっといい方法あったら教えてください
500:デフォルトの名無しさん
10/03/08 15:57:25
シート名チェックってそんなに時間かかる処理だっけ?
何枚くらチェックしてるの?
501:デフォルトの名無しさん
10/03/08 16:13:38
シートの存在チェックは、何かやってみてon error gotoが一番速い
502:499
10/03/08 16:22:21
>>500
50枚くらいなんだけどモバイル用ノートで
CPUがセレロンなんだ・・・
>>501
やはりそうですよね
まず実行してみてだめだったらon error gotoで
具体的エラー内容を探すように変えていきます。
ありがとうございました。
503:デフォルトの名無しさん
10/03/08 18:02:04
>>502
ん、通じたのかな?例えばIsWorkSheetExist()みたいな関数を作って、その中で
on error goto NotExist
a = worksheet("Sheet1").range("a1").value // (*)
return true
NotExist:
return false
をやれってことで、「何かやって」は(*)の行の内容のこと。
いろんな関数にon error gotoをばらまけってことじゃないよ。
504:デフォルトの名無しさん
10/03/08 18:36:00
ADOつかってSQL使えば?
別にExcelのシートに対してもSQLで読み書きできるよ
505:デフォルトの名無しさん
10/03/08 20:14:29
こんばんは。どなたか詳しい方教えてくださいませんか。
エクセルのマクロでCSVファイルを開く→編集→保存(CSV形式)までを自動化しているのですが、
保存時の文字コードをS-JISではなくEUC-JPにして保存したいのです。
色々調べたんですが使えそうなのがなかったので・・。
506:デフォルトの名無しさん
10/03/08 21:02:08
保存した後で変換ツールに投げるとこまで自動化したらばどうよ
507:デフォルトの名無しさん
10/03/08 21:19:20
>>505
nkf.dll
508:デフォルトの名無しさん
10/03/08 21:48:31
ありがとうございます。
nkf.dll
を使ってみようと思います。
509:デフォルトの名無しさん
10/03/08 22:44:29
詳しい方に質問です。
ExcelVBAでシートに保護をかけて、変更して欲しくないセル(項目名など)
をロックしています。
ただ、シートに保護をかけてしまうと、テキストボックスや線オブジェクト、
図形オブジェクトがdisable?になってしまって使用できなくなります。
何か解決する方法はありますでしょうか?
510:デフォルトの名無しさん
10/03/09 00:33:02
保護の対象を細かく指定すりゃいいだろ
511:デフォルトの名無しさん
10/03/09 02:03:00
DrawingObjects:=False
512:デフォルトの名無しさん
10/03/09 14:40:04
XPで2003を使用しています。
VBA初心者で調べつつ作成しましたが、思った動作になりません。
どうかご教示下さい。
仕入先マスタのシートで仕入先CDを重複しないよう、入力後に
チェックをするようにしました。
(コードは次レスに貼ります)
【問題点】
If Not IsNumeric(Target.Value) Then Exit Sub
を入れると、ターゲットが複数行の場合は動作してくれません。
上記のコードを削除すると、複数行を挿入したり、連続しない複数行を
削除した時に重複したと認識されてしまいます。
(emptyかNullが重複?)
※つづきます
513:512
10/03/09 14:42:31
※つづきです
Dim maxRow As Long
Private Sub Worksheet_Change(ByVal Target As Range)
With Workbooks("仕入管理帳.xls").Worksheets("仕入先マスタ")
maxRow = .Cells(Rows.Count, 1).End(xlUp).Row
' If Not IsNumeric(Target.Value) Then Exit Sub
If Target.Column <> 1 Then Exit Sub
Set rngTarget = .Range("A2:A" & Target.Row - 1)
Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
If Target.Row <> rngFind.Row Then
Application.EnableEvents = False
MsgBox ("仕入先CDが重複しています"), vbExclamation
Target.ClearContents
Application.EnableEvents = True
End If
514:512
10/03/09 14:44:01
※最後です
Else
Set rngTarget = .Range("A" & Target.Row + 1 & ":A" & maxRow)
Set rngFind = rngTarget.Find(Target.Value, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
If Target.Row <> rngFind.Row Then
Application.EnableEvents = False
MsgBox ("仕入先CDが重複しています"), vbExclamation
Target.ClearContents
Application.EnableEvents = True
End If
End If
End If
End With
End Sub
よろしくお願いします。
515:デフォルトの名無しさん
10/03/09 15:20:45
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
516:デフォルトの名無しさん
10/03/09 15:58:01
>>512
Targetに複数のセルが含まれるときは、こうすれば一つずつチェックできる
もちろんセルが1つでもエラーにはならない。Forの中を1回通るだけ
For Each c In Target
If Not IsNumeric(c.Value) Then Exit Sub
Next c
517:512
10/03/09 16:25:12
>>516
出来ました!ありがとうございます!
1週間もあれこれ悩んでいたので、とても助かりました!!
518:デフォルトの名無しさん
10/03/09 20:57:12
Excelに
Craete AAA_TBL
~
一行改行されて
Craete BBB_TBL
~
一つのシートにこういうデータがあった場合、
crateAAA_TBL.sqlファイルを作成して
その中には
Craete AAA_TBL
~
crateBBB_TBL.sqlファイルを作成して
その中には
Craete BBB_TBL
~
と分割したいのですが
分かりますでしょうか?
519:デフォルトの名無しさん
10/03/09 21:01:46
わけわからん、なにが起きてるんだ
r=3
c=10
debug.print r , c
if r=3 and c=2 then
........
elseif r=3 and c=4 then
........
elseif r=3 and c=3 then
........
elseif r=3 and c=2 then
.......
elseif r=3 and c=10 then
debug.print r , c
debug.print "ここまで来た"
end if
実行結果
3 10
520:デフォルトの名無しさん
10/03/09 22:00:52
Sub test()
r = 3
c = 10
If r = 3 And c = 10 Then
Debug.Print r, c
Debug.Print "こないわけないだろ"
End If
End Sub
521:デフォルトの名無しさん
10/03/09 22:15:58
でも来ねえだもん、くまった
522:デフォルトの名無しさん
10/03/09 22:18:37
省略せずに丸ごとソースを貼るかエクスポートしてどこかにアップしろ
523:デフォルトの名無しさん
10/03/09 22:20:24
if r=3 and c=2 then
まったく同じ条件のIfが2つある。どうせほかにもタイプミスとかしてるに決まってる
524:デフォルトの名無しさん
10/03/09 22:44:29
デバッガでブレークポイント仕掛けてステップ実行しろよ
525:デフォルトの名無しさん
10/03/09 22:45:45
スマソ、自己解決した
頭のほうの if に不等号が入ってた
思い込みがあると目が見てても脳が見てないようだ
526:デフォルトの名無しさん
10/03/10 00:17:38
無能には良くあること
527:デフォルトの名無しさん
10/03/10 00:37:20
本当に>>523が正解だったとは
528:デフォルトの名無しさん
10/03/10 06:46:48
不等号が入ってたのは正解なので
タイプミスではありません
見のがしです
すいません、正確に言っておきたいもので(まげられないおんな風)
529:デフォルトの名無しさん
10/03/10 07:34:21
ソフトのこと全く知りません。
そんな僕でもがんばればVBAは習得できるでしょうか?
530:デフォルトの名無しさん
10/03/10 10:13:26
はじめから知ってるやつはいねえからそこは心配ない
あとはセンスしだい
531:デフォルトの名無しさん
10/03/10 11:19:08
>>530 ありがとうございます。
超入門の本を読んでいるのですが、読み終わったらもう少し専門書を購入し読みながら、
他の人の書いたプログラムを解読しつつ勉強しようと思うのですが、
このやり方でいいのでしょうか?
532:デフォルトの名無しさん
10/03/10 11:49:53
人が言葉を覚えるとき最初はオウム返しから始まるでしょ
プログラム言語もそれと似たようなもんですよ
書籍のサンプル等をガシガシ打ち込んでけば、身についていきます
コピペではあんまり身につきません、コピペが早くなるだけです
手打ちでがんばってください
人の書いたプログラムの解析は自分で作るよりも大変ですから、
そこから入るのは無理があるように思います
533:デフォルトの名無しさん
10/03/10 18:49:45
>>531
そういうやり方&他人のコード解読法で一回挫折したので、その後検定取りの為の勉強したな。(VBAエキスパートスタンダード)
アレは基本的に誰でも受かるように出来てるし、体系だって勉強出来るシステムになってるので基本は身に付くよ。
534:デフォルトの名無しさん
10/03/12 05:27:46
Excel VBAで、コピーしたセル範囲をペーストする時に列幅を変えずに貼り付ける事は
可能でしょうか。
コピーする内容にセル結合や罫線が含まれています。
どうかご教授下さい。
535:デフォルトの名無しさん
10/03/12 07:59:09
列をコピー&ペースト
536:デフォルトの名無しさん
10/03/12 12:00:19
>>534
まず普通にコピペしたあと、同じ場所にもう一度形式を選択して貼り付け→列幅
537:デフォルトの名無しさん
10/03/12 20:03:47
B3セルに"私は花子ですわ"、B4セルに"私は太郎ですよ"
があるとき、C3、C4セルにA列の2つの文字列を比較して違う部分を赤色にしたい。文字列の長さは同じとする。
で、次のように作ったんだけど、最後しか赤くならない。なんで?
Sub 文字列比較()
' 文字列比較 Macro
' マクロ記録日 : 2010/3/12 ユーザー名 : xp
Dim str1 As String
Dim str2 As String
Dim buf1 As String
Dim buf2 As String
str1 = Range("B3")
str2 = Range("B4")
For i = 1 To Len(str1)
buf1 = Mid(str1, i, 1)
buf2 = Mid(str2, i, 1)
If StrComp(buf1, buf2, vbTextCompare) = 0 Then
Range("c3").Value = Range("c3").Value & buf1
Range("c4").Value = Range("c4").Value & buf2
Else
Range("c3").Value = Range("c3").Value & buf1
Range("c4").Value = Range("c4").Value & buf2
Range("c3").Characters(i, 1).Font.ColorIndex = 3
Range("c4").Characters(i, 1).Font.ColorIndex = 3
End If
Next
End Sub
538:デフォルトの名無しさん
10/03/12 20:32:35
初歩的な質問ですがお願いします。
For
If xxx then
①の処理
Else
②の処理
End If
③の処理
Next
xxxの場合、①の処理をした場合には、③の処理をせずに
次のfor文へ行きたいのですが、elseの中になにを書けばいいでしょうか?
539:デフォルトの名無しさん
10/03/12 20:42:58
>>537
マクロの記録でやってそうだからわかりそうなもんだけど、
Range("c3").Characters(3, 1).Font.ColorIndex = 3 '花
Range("c3").Characters(4 1).Font.ColorIndex = 3 '子
Range("c3").Characters(7, 1).Font.ColorIndex = 3 'わ
は続けてやらないとダメだと思う。
j = 0
For i = 1 To Len(str1)
If StrComp(Mid(str1, i, 1), Mid(str2, i, 1)) <> 0 Then
j = j + 1
ReDim Preserve s(1 To j)
s(j) = i
End If
Next
こんな感じで位置を先に取得してみては?
540:デフォルトの名無しさん
10/03/12 20:46:19
連レスすまん。
>>538
②の処理の次に③を書いちゃダメなの?
For
If xxx then
①の処理
Else
②の処理
③の処理
End If
Next
それか、エスパーぎみに答えるとSelect caseを使うとか??
541:デフォルトの名無しさん
10/03/12 20:54:58
>>537
これの意味を勘違いしているような
Range("c3").Value = Range("c3").Value & buf1
セルc3の文字列を取出してbuf1の内容と文字列結合 → セルc3に上書き
この処理をすると これ以前にあった色指定が無効となる
つー事で
>>537を修正すると
Sub 文字列比較()
Dim str1 As String
Dim str2 As String
Dim buf1 As String
Dim buf2 As String
str1 = Range("B3")
str2 = Range("B4")
Range("c3").Value = str1
Range("c4").Value = str2
For i = 1 To Len(str1)
buf1 = Mid(str1, i, 1)
buf2 = Mid(str2, i, 1)
If StrComp(buf1, buf2, vbTextCompare) <> 0 Then
Range("c3").Characters(i, 1).Font.ColorIndex = 3
Range("c4").Characters(i, 1).Font.ColorIndex = 3
End If
Next
End Sub
542:538
10/03/12 21:03:38
>>540
ありがとうございます。
顔洗って出直してきます。
543:デフォルトの名無しさん
10/03/12 21:25:28
For
If xxx then
①の処理
Else
②の処理
③の処理
End If
Next
544:デフォルトの名無しさん
10/03/13 05:44:13
>>538
for x=1 to 100
if xxx _
then
①の処理
else
②の処理
end if
③の処理
Next
次のfor分の処理
こう書くと ③の処理をコメントアウトすればいいんじゃねということがわかるけど
②の処理のあと”だけ”に③の処理をしたい、と言うこと?それとも
真ならば他の人のいうとおりだけど
③の処理は②の処理の前にしたいのか、後にしたいのかが不明確ですよ
③の処理が②の処理と独立ならば順不同だけど
545:デフォルトの名無しさん
10/03/13 06:06:19
VBAと関係ないね
546:デフォルトの名無しさん
10/03/13 11:50:59
Webクエリでデータを読み込んで加工するVBAを作成しています
データの込みこみを待ってから次の工程へ行くようにするにはどうすればよいですか?
547:デフォルトの名無しさん
10/03/13 15:10:25
>>546
Do While IEobject.Busy = True And IEobject.ReadyState <> 4
548:デフォルトの名無しさん
10/03/13 17:47:47
こみこみ ← なんかカワイイ
549:546
10/03/13 18:59:55
ありがとうございます
WebクエリとIEObjectの関係が分からないので、
もう少し調べます
550:デフォルトの名無しさん
10/03/13 20:40:49
Cells.Replace What:="1", Replacement:="1", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
0から9までの全角数字を半角数字に変換したいのですが
上記を10回書くよりも
これをfor文で回したいのですが
全角でというのか実現できません
教えてください
551:デフォルトの名無しさん
10/03/13 21:28:58
>>550
StrConv
552:デフォルトの名無しさん
10/03/13 22:07:45
すみません質問です
以下のような数字の置き換えをしたいのですがどのようにすればいいでしょうか?
<a name="1"> → <a href="hoge">
<a name="2"> → <a href="hoge">
<a name="3"> → <a href="hoge">
~
<a name="9999"> → <a href="hoge">
553:デフォルトの名無しさん
10/03/13 22:21:59
>>550
全角文字をループで扱うのはけっこう難しい。
文字コードを数値として扱う手もあるが、可読性が悪くなる。
プログラムの見栄えをすっきりさせたいなら、
配列に入れるか、置換のための関数を作るという手がある。
aryWhat = Array("0", "1", "2", ……
554:デフォルトの名無しさん
10/03/13 22:30:04
>>552
そういう場合は正規表現を使います。桁数の決まっていない数字は[0-9]+と書きます。
<a name=""[0-9]+"">
とすれば、これ1行で1から9999までのすべてが検索の対象になるので、これをhogeに置換します。
555:デフォルトの名無しさん
10/03/13 22:33:35
>>550
ヒント
Sub d()
For i = 0 To 9
Debug.Print i, StrConv(i, vbWide)
Next
End Sub
556:デフォルトの名無しさん
10/03/13 23:34:43
>>554
ありがとうございます
すごく助かりました
557:デフォルトの名無しさん
10/03/14 11:41:57
別のエクセルファイルの標準モジュールに書いてある定数を読み込むには、
どうしたらいいでしょうか?
558:557
10/03/14 12:23:52
自己解決しました
559:デフォルトの名無しさん
10/03/14 16:11:54
NO 品名 価格 数量 金額
1 りんご 100 3 300
・・・
という連続したデータを
NO 1 ・・・
品名 りんご
産地
数量 3 ・・・・
というふうに転記させる方法を教えてください。
転記先のフィールドは、元のフィールド名のものがない場合もあり、
逆に元のフィールドに無いものが転記先にあったりします。
また、転記元や転記先のフィールドの順番は、入れ替わる場合があります。
うまいやり方がありましたら教えてください。
560:デフォルトの名無しさん
10/03/14 17:34:39
>>559
どうかな。
1行目に作業用の空白行を追加する。
転記元の左端から1セルずつ値を読み、右に移動するループ(セルが空白になるまで)
転記先の上端から1セルずつ値を読み、下に移動するループ
if転記元の値と転記先の値が同じならば
作業用の行に転記先のセル位置を記入
(ここまでで転記先のセル位置を取得)
A1 A2 A4
NO 品名 価格 数量 金額
1 りんご 100 3 300
あとは転記元のデータを1行ずつ処理。
561:デフォルトの名無しさん
10/03/14 17:39:05
>>559
新しいほうのデータの1レコード分の配列を用意する
古いほうのデーターから該当する配列の位置に読み込む
新しいデータへ配列から書き出す
以後レコード分繰り返し
562:デフォルトの名無しさん
10/03/14 18:22:14
別のシートにセルを一個ずつコピーしていけばいいのでは
563:デフォルトの名無しさん
10/03/14 18:48:01
おれだったらVLOOKUPでぱぱっと片付ける
564:480
10/03/14 22:45:10
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
565:デフォルトの名無しさん
10/03/15 14:15:40
Excel2007
Workbooks.Add
で新規にワークブックを作成する際に
オプション→数式で自動になるように作成することってできませんか?
今の状態は手動になっています。
566:565
10/03/15 18:09:02
自己解決?
元のプログラムが入っているブックのオプションが手動になっていたので自動に変えたら
新しくできたブックも自動になってました。
なんか、自分自身をコピーして作ってるみたいな?(よく判りませんが w
567:デフォルトの名無しさん
10/03/16 11:39:35
WinXP Excel2003
Sub Input_Date(ByVal iDay As String)
ActiveCell.Value = CStr(iYear) _
& "/" & CStr(SpinButton1.Value) & "/" + iDay
ActiveCell.NumberFormatLocal = ComboBox1.Value
End Sub
いまのままだと何処のセルにも入力するようになっています。
指定したセルにのみ入力するよう変更したいのですが、どこを直せば良いでしょうか?
568:デフォルトの名無しさん
10/03/16 12:59:16
>>567
ActiveCell
569:デフォルトの名無しさん
10/03/16 16:40:50
VBAで、「どこぞのプロシージャ内で」、「別のプロシージャやイベントを設定・修正」するって出来る?
例えばBook/Formのロード時のイベントプロシージャで、
btn_test_1
btn_test_2
…
btn_test_10
…って感じのボタン10個について、forで回してそれぞれのClickイベントに同一の処理を上書きさせる、とか。
それともクラスモジュール作って~な やり方しか無いのだろうか?
わかり辛い書き方でごめん。
570:デフォルトの名無しさん
10/03/16 17:54:28
2003、XPです。
株のシストレの計算をやらせるのに、ブック2枚を頻繁に行ったり来たりさせるようなモジュールはやはり相当遅くなるのでしょうか?
A:計算する元の四本値データだけ入ったブック。(シートが35枚あって、それだけで既に80MBのサイズ)
B:Aから計算結果だけを出力させるブック。
一枚に詰め込むべきか、複数枚に分けて管理すべきか・・・
571:デフォルトの名無しさん
10/03/16 18:11:19
>>570
単にデータを読み書きするだけなら大して遅くはならない。
いちいちSelectとかActivateとかやっちゃうと遅くなるんで、そうしないように注意してプログラムを作ればいい。
あとは、オブジェクト型変数とかWith句をできるだけ活用すること。
計算中は余分なイベントを止めるのもそこそこ効果がある。
572:デフォルトの名無しさん
10/03/16 18:14:14
>>569
質問の1行目だけ見ると答えはNO。
だけどたぶん、別の方法でできることをわかってないだけの気がする。
573:デフォルトの名無しさん
10/03/16 18:38:49
VBAでFX自動売買ソフトを作る事って可能でしょうか?
やりたい事
・業者orヤフー等からのレート取得
・発注機能
こんな感じです
574:デフォルトの名無しさん
10/03/16 18:42:34
可能です
575:デフォルトの名無しさん
10/03/16 18:46:01
是非作ってみたい
もしくはどなたかに作成していただきたいです
MT4だと業者に対応していないので・・
576:デフォルトの名無しさん
10/03/16 19:00:54
プログラムもわからんのにそんな事言っててもどうしようもないと思うが
んで、誰がただでやるわけww?
577:デフォルトの名無しさん
10/03/16 20:13:48
>>570
株価データの保存はDBに任せて、Excelは計算に専念させた方がスッキリすると思うけどね
578:デフォルトの名無しさん
10/03/16 20:17:59
Cells(1, 2) = Cells(1, 1)
というマクロを作ったのですが、Cells(1,1)の文字数が多すぎると
#VALUE!
というエラーが出てしまいます。
Cells(1, 1)の値を他のセルにコピーするにはどうすればいいのでしょうか。
579:デフォルトの名無しさん
10/03/16 20:27:13
まずは仕様書を書いてね
そしたら見積もり出すから
580:デフォルトの名無しさん
10/03/16 20:28:36
>>578
そのエラーは文字列の長さとは直接は関係ありません。
まずB列の幅を広げて、セルB1の書式を確認してください。
581:デフォルトの名無しさん
10/03/16 20:58:02
>>578
当方の環境下では
Cells(1, 2) = Cells(1, 1)
だと 半角256文字以上で#VALUE! になるね
Cells(1, 2).Value = Cells(1, 1).Value
だと大丈夫みたい なぜかしらんけど
つか.Valueを付けるのが本来の使い方なんだけどね
582:デフォルトの名無しさん
10/03/16 21:29:59
>>570
ADOつかてSQL書けよ
583:デフォルトの名無しさん
10/03/16 22:30:23
>>581
XP、2003だけど下記コードでエラー出ない。
なんでだろ?
Sub test()
Cells(1, 1) = String(257, "あ")
Cells(1, 2) = Cells(1, 1)
End Sub
↑どっかおかしい?
584:デフォルトの名無しさん
10/03/17 01:39:38
>>583
これでやったら912文字のところでエラーになった
Sub test()
For r = 1 To 1000
Cells(r, 1) = String(r, "あ")
Cells(r, 2) = Cells(r, 1)
Next
End Sub
585:デフォルトの名無しさん
10/03/17 01:51:17
>>575
50万くらい出す気あるなら話聞いても良いよ。
586:デフォルトの名無しさん
10/03/17 02:10:47
>>584
Sub celltest()
Cells(1, 1) = String(910, "あ")
Cells(1, 2) = Cells(1, 1)
End Sub
910文字まではOKってことだな。
>>578と>>581はどういう現象なんだろ?バージョンの問題かな?
587:デフォルトの名無しさん
10/03/17 03:01:12
いや、911文字までOK。
ていうか、みんなOSとExcelのバージョンぐらい書こうよ。
うちはXPと2003。
ちなみにVBAを使わずにセルに直接入力した場合は1セル32767文字まで入る。
URLリンク(office.microsoft.com)
588:デフォルトの名無しさん
10/03/17 03:15:21
>>587
ん?
>>584だと911行目でエラーが発生してるから
911文字はエラー、910文字まではOKってことじゃないの?
OSとバージョンが同じだから、やっぱりバージョンの問題なんだろうな。
589:デフォルトの名無しさん
10/03/17 03:22:49
doudemoii
590:デフォルトの名無しさん
10/03/17 12:25:45
どうでもよくない。
>>578と>>581の状況が再現できないと回答もできないし、
自分が同じトラブルに遭う可能性だってあるわけだから解決できないと気持ちが悪い。
591:デフォルトの名無しさん
10/03/17 12:47:26
>>589
だんだん話しについていけなくなっちゃったんだろうなw
592:デフォルトの名無しさん
10/03/17 14:51:07
気持ち悪いから>>578早く戻って来い!
593:デフォルトの名無しさん
10/03/17 16:29:57
>>581で再現できてんじゃん
594:デフォルトの名無しさん
10/03/17 17:26:31
で、解決方法は?
595:デフォルトの名無しさん
10/03/17 17:31:37
再現できないとか言ってるから、再現できてると言ったまで。
>>581によれば、Value付ければいいんじゃないの?
596:デフォルトの名無しさん
10/03/17 17:47:44
>>594
Cells(1, 2) = Cells(1, 1).Valueにすればいい。
Cells(1, 2) = Cells(1, 1)と何が違うのかは知らん。
597:デフォルトの名無しさん
10/03/17 17:53:15
解決できないから気持ちが悪いんじゃなくて、解決できてるけど仕組みがわからなくて
気持ちが悪いんじゃないの?
598:デフォルトの名無しさん
10/03/17 18:11:26
初歩的な質問ですんません
セルに直接入力せずに三角形みたいなのをクリック(セルをクリックすると現れる三角形)すると
あらかじめ設定してた項目を取り出せるあの機能はなんて名前でしったけ?
またその設定はどこでやればいいですか?
お願いします。vista使いです
599:デフォルトの名無しさん
10/03/17 18:16:36
>>598
ひょっとして、これのことか?
Excel講座 > セルをコンボボックスにする
URLリンク(www.serpress.co.jp)
600:デフォルトの名無しさん
10/03/17 18:35:25
うちだと910文字超えないとエラーにならないのに、
どうして>>581は256文字でエラーになるの?
もうちょっと再現の条件とか手順をkwsk
601:デフォルトの名無しさん
10/03/17 18:45:27
>>599
そうそうそれそれ
どうもすんません
602:デフォルトの名無しさん
10/03/17 19:41:37
>>598
セルにコンボボックスを仕込むより入力フォームを作って
ボタンぼんでシートに値がコピーされるように作った方がいいと思うが。
603:デフォルトの名無しさん
10/03/17 20:40:45
テスト
604:デフォルトの名無しさん
10/03/17 22:04:36
Excel2007
ブックを新たに作成するときにシートの枚数を3枚とか指定することは出来ないのでしょうか?
605:デフォルトの名無しさん
10/03/17 22:19:57
テンプレートで
606:デフォルトの名無しさん
10/03/17 22:20:48
>>604
Application.SheetsInNewWorkbook = 3
こういうこと?
607:デフォルトの名無しさん
10/03/17 22:23:33
あ?テンプレの話?
2003だと
ツール→オプション→全般→新しいブックのシート数
で設定できる。2007はわからん。
608:デフォルトの名無しさん
10/03/17 22:28:37
>>606
それです。ありがとう
テンプレートは?状態ですけどw
609:デフォルトの名無しさん
10/03/17 22:30:49
>>608
とりあえずググれよ。(もう見てないだろうが・・・)
610:デフォルトの名無しさん
10/03/18 06:32:14
>>600
どうしてExcelのバージョンすら明記しないのか不思議。馬鹿?
611:デフォルトの名無しさん
10/03/18 13:18:25
>>610
話の流れからすると910文字までいけるのは、XPで2003だって二人が書いてるぞ。
バージョン明記してないのは質問者と>>581の解答者だ。
それはそうと、これだと10000行までいけるなw
Sub test()
For r = 1 To 10000
Cells(r, 1).Value = String(r, "あ")
Cells(r, 2).Value = Cells(r, 1).Value
Next
End Sub
612:611
10/03/18 13:44:40
おっと、>>611はXPで2003だ。
ちなみに、Win7の2007でも検証してみた。
・Valueあり→10000行までいけた
・Valueなし→8203行目でエラー
という結果。2007だとValueなしでもこんなにいけるんだなw
ってことは、質問者のバージョンは2002以前とエスパーしてみる。
それにしても、2007のVBEどっから起動するのかわからなくてビビったw
613:デフォルトの名無しさん
10/03/18 15:21:35
>>611-612
>>600の「うち」の環境を書けと言ってるんだ、馬鹿。
じゃなければ、第三者が全体を把握できないだろ。
614:デフォルトの名無しさん
10/03/18 15:41:08
>>611-612
Value付ければいいって結論が出てるのに、いつまで何やってんの?
615:デフォルトの名無しさん
10/03/18 16:06:15
>>613
>>600は、910文字超えないとエラーにならないって書いてあるから
流れから2003だってわかると思うが?
流れを読まなくてもわかるように、レス内に明記するのがネチケット(笑)ということなら、
まぁ、そういうことなんだろうw
>>614
Valueは単純に“省略可能なもの”と認識してたんだが、
今回のケースで言うと、場合によっては省略してはいけないってことか?
すまん、素人にもわかるように説明してくれ。
616:デフォルトの名無しさん
10/03/18 16:13:20
>>615
とことんアホだな。
仮にExcel 2003が911文字目からエラーになるということだとしても、
911文字からエラーになるからといってそれがExcel 2003とは限らないだろ。
高卒文系なのか?
何かを明らかにしたくてその話題に参加し、なおかつ相手に再現の手順を求めるのなら、
まず自分の情報を出せっつーこった。
> すまん、素人にもわかるように説明してくれ。
知るかアホ。
このスレは素人の好奇心を満足させるスレじゃねーよ。
617:デフォルトの名無しさん
10/03/18 16:19:38
>>611
ド素人はこれだから困る。
セルに設定出来る最大文字数はヘルプにちゃんと書かれてる。
ヘルプ見ろ。
618:デフォルトの名無しさん
10/03/18 16:24:40
エクセルVBAに詳しい人教えてください!
スレリンク(morningcoffee板)
619:デフォルトの名無しさん
10/03/18 16:32:09
いつまでやってんだよ……
620:デフォルトの名無しさん
10/03/18 16:32:10
>>616-617
論点がずれてますよ。
人のことを馬鹿とかアホとか高卒文系とかド素人とか言ってるけど、
話の内容を理解できていないのは、あなたの方ですね。
何かを明らかにしたくないなら、あなたはこの話題に参加しなくてもいいと思います。
621:デフォルトの名無しさん
10/03/18 16:37:10
ずらしてんのはお前の方だ馬鹿。
これになんかコメントしてみろ、アホ。
> 仮にExcel 2003が911文字目からエラーになるということだとしても、
> 911文字からエラーになるからといってそれがExcel 2003とは限らないだろ。
> 高卒文系なのか?
622:デフォルトの名無しさん
10/03/18 16:38:03
>>618
ソース見てボタンの名前調べればいいんじゃないの?
そんな単純なことじゃなくて?
623:デフォルトの名無しさん
10/03/18 16:38:50
・Valueを付ければ問題ない
・Excelの仕様上、何文字まで設定出来るかはヘルプに書かれている
これ以上、何を知りたいの?
624:デフォルトの名無しさん
10/03/18 16:41:05
話の流れからするとw、>>600=>>611じゃねーの?
馬鹿と言われて悔しかったのかな?
625:デフォルトの名無しさん
10/03/18 16:41:30
>>621
スレリンク(mental板)l50
とりあえず筋トレでもしてみたら?
626:デフォルトの名無しさん
10/03/18 16:45:40
おまいらいつまでやってんだwwwwwwwwwwww
627:デフォルトの名無しさん
10/03/18 16:50:36
>>625
反論不能か、高卒文系のド素人が。
もう黙っとけ。
628:デフォルトの名無しさん
10/03/18 16:57:30
VBAからGroovyのプログラムを呼びたいんですが、何か方法はありますか?
Groovyに限らず、VBAから他の言語のプログラムを呼んで、返り値を使用する
ことってできるんですかね?
629:デフォルトの名無しさん
10/03/18 16:58:28
一つのセルには200文字も必要ねーな。
50文字でも十分じゃね?
数式厨には足りないかも知らんけどw
超長ーい数式を得意としてるやつもいるからな。
630:デフォルトの名無しさん
10/03/18 17:05:02
>>621
必死ですね。コメントを求められているのでレスしますね。
その事象が起きるからといって、Excel2003だという証明は私には出来ません。
学歴も聞かれてますね。おっしゃる通り文系ですが大卒です。
これでよろしいでしょうか?
631:デフォルトの名無しさん
10/03/18 17:06:40
だよな。表計算ソフトなんだから50文字でも多いぐらいだ。
632:デフォルトの名無しさん
10/03/18 17:09:01
超長~い数式は勘弁してほしいw
633:デフォルトの名無しさん
10/03/18 17:18:44
超長ーい数式とか配列数式とかSUMPRODUCTのフィルコピーが大好きなやつはほとんどアホばかり。
VBAで言えば変数使わないで何度も同じ値を取得してるようなもんだ罠。
数式でやるならVBAの変数に相当する作業セルを使えってこった。
634:デフォルトの名無しさん
10/03/18 17:22:44
>>623
もういい加減アホとか言うのやめれ。
635:デフォルトの名無しさん
10/03/18 17:25:04
ん?俺のことかな
すまん、今度からヴァカと書くことにするわ。
636:デフォルトの名無しさん
10/03/18 17:27:44
>>630
証明できるかどうかなんて聞いてないんだよ。
>>615
> 流れから2003だってわかると思うが?
わかると思ってるなら、それは馬鹿ゆえだってことだ。
横からノイズ増やしといて、俺の知りたいことだけお前ら教えろとかいう奴はいらないんだよ。
わかった?
637:デフォルトの名無しさん
10/03/18 17:31:39
ふぁいと!
俺は50文字でも十分すぐるから興味ナス
638:デフォルトの名無しさん
10/03/18 17:32:35
>>630
お前も必死だよwww
639:デフォルトの名無しさん
10/03/18 17:34:53
大卒文系って、裏・逆・対偶レベルの論理学も理解できないの?
今はやりのゆとりって奴?
640:デフォルトの名無しさん
10/03/18 17:36:20
まぁ餅つけ
50文字でも十分ということで糸冬了
641:デフォルトの名無しさん
10/03/18 17:39:24
まぁ、セルに表示できないような文字数を設定するというのは、基本的な使い方では
ないわけだから、自分がそのような処理を実装しなければならなくなったときに、
ターゲットとなるExcelの仕様上の制限を調べ、テストを十分にやれば良い。
642:デフォルトの名無しさん
10/03/18 17:41:21
必要条件と十分条件を良くわかってない馬鹿SEのことを思い出した。
643:デフォルトの名無しさん
10/03/18 17:43:09
CellsのデフォルトプロパティがValueじゃないってことじゃないかと思うけど、
調べるつもり無し。
644:デフォルトの名無しさん
10/03/18 17:51:55
Cells(2, 1) = Cells(1, 1)
でエラーが発生するとき、
Range("B1") = Range("A1")
でもエラーが発生するね。
何故なのかはそれほど知りたくないけど、RangeのデフォルトプロパティはValueだって
思ってたので、ちょっとキモチワルイ。
やっぱり
Range("B1") = Range("A1").Value
と書くと動く。
まぁ、デフォルトプロパティは使うなってことかな。
645:デフォルトの名無しさん
10/03/18 17:52:57
スレが伸びてると思ったら一人で暴れてるようだな。
文体でバレバレだw
646:デフォルトの名無しさん
10/03/18 17:57:50
>>644
セルの文字数についてはバージョンによる違いだってわかるけど、
Valueの省略については色々調べてもわからなくて、昨日からずっと気持ち悪い。
納得できる答えをくれる神は降臨しないかと待ってるんだけど
スレ覗く度に荒れる一方で(ry
647:デフォルトの名無しさん
10/03/18 18:22:47
>>646
納得できる答えが見つかっても、安全側に倒してデフォルトプロパティに頼らない
コードを書くしかないという状況は変わらないよ。
648:デフォルトの名無しさん
10/03/18 18:24:50
>>645
バレバレw
649:デフォルトの名無しさん
10/03/18 18:29:42
まぁどっちもひといが、この板的にはこれが一番ひどい。
>>611
>それはそうと、これだと10000行までいけるなw
650:デフォルトの名無しさん
10/03/18 18:38:10
例えば
Sub test()
MsgBox TypeName(Range("A1").Value)
MsgBox TypeName(Range("A1"))
End Sub
とやると
Empty
Range
となる
651:デフォルトの名無しさん
10/03/18 19:46:05
>>650
だから?
652:デフォルトの名無しさん
10/03/18 19:54:40
>>611にガン擁護された>>600は、どのような登場の仕方をするのであろうか。
653:デフォルトの名無しさん
10/03/18 20:44:22
>>623
256文字でエラーになるExcelのバージョン
654:デフォルトの名無しさん
10/03/18 23:07:40
>>653
え!?それかよっ!!www
655:デフォルトの名無しさん
10/03/18 23:27:05
>>653
うち Excel2003(XP) と Excel97(Win98)あるんだけど
Excel97(Win98) だと256文字でエラーになる
656:デフォルトの名無しさん
10/03/18 23:48:24
哲也君がVBAマクロを2昼夜かけて作ったんですよ。
これが本当の「マクロ 2夜連続」なんつって。
657:デフォルトの名無しさん
10/03/19 02:04:41
>>653
だったら、初めから自分の環境の結果を書いとこうね。
俺は何もしないけど、お前ら俺の知りたいことを教えろパターンですな。
ちなみに俺は、これまで出ていないExcel 2000を持っていて実験もし結果もわかったが教えない。
658:デフォルトの名無しさん
10/03/19 06:32:11
俺はウチとまったく同じ環境の結果がガイシュツだから書かなかっただけなんだけど、
同じことを何度も書かなきゃいけないの?
役所に出す書類だな、まるで。
659:デフォルトの名無しさん
10/03/19 06:38:42
それが知りたいんだったら、既出の情報をまとめるなりなんなりしろよ。
餓鬼かよ。
660:デフォルトの名無しさん
10/03/19 07:31:23
私女だけど、たった1行の実験結果を書かずに言い訳を何行も書く男の人って
661:デフォルトの名無しさん
10/03/19 08:40:37
まとめなきゃ把握できないほどの情報量か?
数えてないけど3例ぐらいしか出てなかっただろ。
662:デフォルトの名無しさん
10/03/19 08:55:26
XP 2003です
ググっても中々みつからないんだけど、
手動で選択したセル範囲の数字を一気に計算(仮に10倍)とかするのってVBAで出来るの?
あとついでに、セル範囲の一番右下の座標も取りたいんだけどやり方教えてください。
663:デフォルトの名無しさん
10/03/19 09:11:53
>>661
いつまでやってんだ
664:デフォルトの名無しさん
10/03/19 09:13:07
>>662
前半:できる。rangeを関数の引数に取りfor each
後半:一発でできるかどうかは知らん
665:デフォルトの名無しさん
10/03/19 09:15:03
>>682
VBAでもちろん出来るが手操作でも出来る。
どっかのセルに10と書いて、コピー、形式を選択して貼り付け、乗算
一個の選択した矩形範囲の右下隅のセルを操作したければ
Selection(Selection.Count).****
Excel2003はこれで大丈夫だが、Excel2007は全セルを選択したとき
CountプロパティがLong型なので入りきれなくてエラーになる。
そこまで考慮するなら
With Selection
.Item(.Rows.Count*.Columns.Count).****
End With
座標って行番号とか列番号とかアドレスが必要なケースは滅多にないだろう。
全くないというわけではないが。
666:デフォルトの名無しさん
10/03/19 09:15:04
>>661
ほら、お前もスレを確認しないと状況がわからないだろ。
>>653の知りたかったことなんて誰も知らないんだから、状況をまとめて
あとこのバージョンの動作を教えてくれってやるのが筋。
667:デフォルトの名無しさん
10/03/19 09:59:47
>>653
Excel 2000では256文字目でエラーになる。
これで全部揃った?揃ったならまとめくらいしてもバチはあたらないよ。
668:デフォルトの名無しさん
10/03/19 10:08:55
Excel95がまだ出てなーなw
669:デフォルトの名無しさん
10/03/19 10:26:54
だれか知ってる人がいたら教えてくれ。
A1の表示形式がG/標準のとき
Debug.Print Format(Range("a1"), Range("a1").NumberFormat)
とやると"M32032ral"が返るんだが、これって何?
670:デフォルトの名無しさん
10/03/19 10:28:49
いかん、Valueつけるの忘れたわ
671:デフォルトの名無しさん
10/03/19 10:31:38
A1の値を書くのも忘れたわ
1の場合ね
672:デフォルトの名無しさん
10/03/19 10:38:56
>>669
知ってるのか知らないのかわからないが、それ、Formatの第二引数の指定方法が間違ってる。
673:デフォルトの名無しさん
10/03/19 11:18:49
競艇のネット自動投票プログラム作っています。自動ログインは完成しましたけど、
次の画面の投票する競艇場選択のボタンを押す方法が分かりません。
押したいボタンのHTMLソースは以下
<input value="福 岡" onclick="jyocd(22)" tabindex="2" type="BUTTON">
ボタンの名前(name)が無いから通常のやり方ではできません。
また、
SendKeys "{TAB 5}"
SendKeys "{ENTER}"
で5番目の競艇場をクリックではできましたが、最終レースが終わると
その競艇場選択ボタンが消えますので、必ずしも××競艇場が5番目とは限らないのです。
検索等で昨日1日中調べてみましたが解決しません。。。助けてください。
674:デフォルトの名無しさん
10/03/19 12:08:09
データについているハイパーリンクの中の数字を取り出して(~info.php?chr=25121とあったら568311)、もしAという数字だったら、その列の情報を全て、シートAにコピー
という仕組みを作りたいと思っております。
ハイパーリンクの中の数字を参照するには、どうしたらよろしいのでしょうか?助けていただけると助かります。
675:デフォルトの名無しさん
10/03/19 12:57:29
>>672
どこが?
まさかNumberFormatLocalってんじゃないだろうね。
もしそう思ってるならそっちが間違ってる。
そんなことはないとは思うけど。
676:デフォルトの名無しさん
10/03/19 12:58:20
まとめました。扱える文字数はバージョンの違いってわかるんですけど、
何故Valueを省略するとエラーが出るのか、どなたか教えて頂けませんか?
【バージョン不明】
256文字以上でエラー
>>578(質問者)、>>581、>>596
911文字以上でエラー
>>600
【バージョン記述あり】
Win98&97(256文字以上でエラー)
>>655
OS不明&2000(256文字以上でエラー)
>>655
XP&2003(911文字以上でエラー)
>>583(>>588?)、>>584(>>587?)、>>586
Win7&2007(8203文字以上でエラー)
>>612
677:676
10/03/19 13:01:21
訂正ですorz
OS不明&2000(256文字以上でエラー)は>>667でした。
678:デフォルトの名無しさん
10/03/19 13:14:44
あぁ分ったわ。
NumberFormatは"General"だから
Gは元号のGで明治だからM
eは和暦の年
nは分
eは和暦の年
ralはGeneralの右3文字だな。
結局Formatじゃ駄目でWorksheetFunction.Textってことか。
俺の間違いだったわ。
679:デフォルトの名無しさん
10/03/19 14:42:54
>>678
いやいや、ヘルプ見ろよ
680:デフォルトの名無しさん
10/03/19 14:46:07
>>676
それ多分OS関係ない。
> 何故Valueを省略するとエラーが出るのか、どなたか教えて頂けませんか?
多分、今ここにいる奴は答えられないから、これまでに回答がないんだよ。
モーグにでも行けば?
681:デフォルトの名無しさん
10/03/19 17:50:13
>>674
> chr=25121とあったら568311
の法則がよくわからない。
Aは数字じゃない。
16進?でもなそさうだし。
682:デフォルトの名無しさん
10/03/19 17:53:43
>>679
FormatもWorksheetFunction.Textも似たようなもんだろうと思ってた俺が
馬鹿だったが、Formatのヘルプの表示書式指定文字なんて一部しか載ってないね。
とりあえず"s","h","n","g","aaa"などが抜けてる。
"General"はWorksheetFunction.TextにはあるがFormatにはないということだな。
683:デフォルトの名無しさん
10/03/19 18:01:50
範囲指定していっぺんに10倍はVBAでもできる。
「形式を選択して貼り付け、乗算」をマクロの記録してみ。
684:デフォルトの名無しさん
10/03/19 18:12:10
Formatのヘルプの最後にある表示書式指定文字だが、あれは一覧じゃなかったか。
685:デフォルトの名無しさん
10/03/19 18:14:19
>>682
ホントだ。ローカルのヘルプは抜けてるのがある。
オンラインヘルプなら全部出るみたいだけど。
686:デフォルトの名無しさん
10/03/19 18:26:38
>>682
あと"p"とか"ccc"とか"ooo"とか"ww"とかもあるみたいね。
Format(1,"ww")が53、Format(1,"www")が531になるがなんのこっちゃ。
687:デフォルトの名無しさん
10/03/19 18:47:18
"p"じゃなくて"q"だったわ。
"ccc"も"c"ね。
Format$(シリアル値,"yyyy/mm/dd")とするところを
Format$(シリアル値,"c")としても同じみたい。
>>685
オンラインのヘルプどこ?
さっきから探してるんだが見つからん。
MSDNかな?
688:デフォルトの名無しさん
10/03/19 18:54:35
cはcountryのcだと予想して地域オプションをいじくってみたら、案の定
Format$(シリアル値,"c")は必ずしもFormat$(シリアル値,"yyyy/mm/dd")と
同じじゃなかったわ。
689:662
10/03/19 19:51:07
>>664-665
回答ありがとうです。本当にたすかりました。
面倒なんで「(どっかのセルに10と書いて)コピー、形式を選択して貼り付け、乗算」をマクロ記録させてそれでやり過ごしました。
690:デフォルトの名無しさん
10/03/19 20:03:49
Formatの奴うざいよ?
Valueの奴と同じちゃうんかと思われるレベル。
691:デフォルトの名無しさん
10/03/19 20:15:38
うざくてすまんね。
Value関連は考えすぎだな。
629と633と637は俺だけどな。
692:デフォルトの名無しさん
10/03/19 20:21:00
というわけど、今後は>>690のハイレベルな回答を期待しましょうねw
693:デフォルトの名無しさん
10/03/19 20:38:21
ヘルプ見ろでFAだろ。
質問者はまだ見れてないようだが。
694:デフォルトの名無しさん
10/03/19 20:42:05
めんどくさいけど探してやった。
ほれ。
URLリンク(msdn.microsoft.com)(VS.80).aspx
695:デフォルトの名無しさん
10/03/19 20:47:20
それVBAも一緒なの?
696:デフォルトの名無しさん
10/03/19 20:51:40
ブイバのことは俺に任せろ!
697:デフォルトの名無しさん
10/03/19 21:04:53
>>693
クソ生意気な奴だなぁ。
ヘルプくらいは真っ先に見てるさ。
俺の見れるヘルプにはcやwwwは見れないんだよ。
お前がそういうなら探せばどっかにあるんだろうけどね。
Formatで検索して出てくる下には書いてない。
Format 関数
ヘルプ > 関数 > D-G
Format 関数の使用例
数値表示書式指定文字 (Format 関数)
文字列表示書式指定文字 (Format 関数)
数値を表すその他の書式 (Format 関数)
もうどうでもいいけどな。
698:デフォルトの名無しさん
10/03/19 21:09:18
>>694
お、ありがとう。
そこにあったか。
どうでもいいと書いたがこれから見るわ。
699:デフォルトの名無しさん
10/03/19 21:14:54
>>693=694の俺なんですが・・・
700:デフォルトの名無しさん
10/03/19 21:18:56
なんというツンデレ!!
おまいら何やってんだよwww
701:デフォルトの名無しさん
10/03/19 21:25:30
>>699
ふーん?
結局お前もまともにヘルプ見てなかったと言うことかw
>>694もリンク先見たけど、cやwwwは載ってないわ。
ExcelヘルプでFormatで検索しても出てこなかったが、表示書式指定文字で検索したら出てきたよ。
702:デフォルトの名無しさん
10/03/19 22:21:05
>>701
日付の書式のヘルプ初めて見たよ。
cとかooooとかwwとか今まで知らんかった。
703:デフォルトの名無しさん
10/03/19 22:35:11
>>702
同じく。
しかしヘルプでFormatじゃなくFormat関数と最後まで打てば日付関連の書式は出てきたな。
手抜きはいかんな。
またうざいとか言われるからこのへんにしとくよ。
704:デフォルトの名無しさん
10/03/19 22:53:23
>>703
「Format 日付」でも出てくるよ。
間にスペース入れればAnd検索だな。
705:デフォルトの名無しさん
10/03/19 23:16:10
>>704
トンクス
Formatだけでも2ページめにあったね。
ヘルプはカーソル当ててF1しか普段使わないから、オンラインヘルプの使い方知らなかった。
706:デフォルトの名無しさん
10/03/20 02:51:23
いつからこのスレは自分が発見したことのメモ帳になったんだ
707:デフォルトの名無しさん
10/03/20 02:53:16
>>701
で、結局そのヘルプのありかをこのスレにフィードバックするつもりは無いのか。
やっぱValueの奴とレベル一緒だわお前。
708:デフォルトの名無しさん
10/03/20 03:37:26
>>672でちゃんと使い方が間違ってると教えてもらってるのに、何なのこいつ。
709:デフォルトの名無しさん
10/03/20 07:56:45
>>672
>>669だが、夜会合ですぐレス書かなくてすまんな。
ヘルプは>>671や>>704のおかげで読めたよ。
俺も実は探せてなかったもんでね。
ヘルプ読めと言いながらVBAのヘルプじゃないものを教えた人もいたみたいだが。
710:デフォルトの名無しさん
10/03/20 08:02:40
まちがった
>>701や>>704のおかげな
711:デフォルトの名無しさん
10/03/20 08:09:44
>>707
ヘルプのありかは>>701はフィードバックしてるんじゃね?
表示書式指定文字で検索って書いてあるし。
Excelヘルプをオンラインヘルプに読み替えればいいんじゃね?
712:デフォルトの名無しさん
10/03/20 10:14:12
ヘルプ見ろで切れまくる奴はいるは、ヘルプ見つけられない奴続出だわ、レベル低すぎ。
お前ら一体今までどうやってプログラミングしてたんだよ?
何でもググってコピペしてたんじゃねーの?
713:デフォルトの名無しさん
10/03/20 10:14:17
エクセルVBAであるサイトのラジオボタンを自動で選択するマクロを作っているんだけど
その方法が検索で調べた方法じゃできなくて困っています。
HTMLのラジオボタンの部分のソースは
<input name="kumiban1" value="1" onclick="check1(this)" tabindex="3" type="RADIO">
となっています。
"kumiban1"のvalue="1" をクリックしたいのです。
714:デフォルトの名無しさん
10/03/20 10:37:36
>>713
同じページ内に同じ名前の name="kumiban1" が複数あった場合は objIE.document.all("kumiban1") だとエラーになる。
そういう時は objIE.document.all("kumiban1")(0) 、objIE.document.all("kumiban1")(1) のように番号を付ける。
自分のチェックしたいボタンが何番目かは自分で調べてね。
715:デフォルトの名無しさん
10/03/20 10:50:18
>>712
まぁまぁ、レベルの高いと思われる>>694でさえ見つけられなったんだから。
俺もF1キーで大体事足りてるしね。
ところで2010では有名なFindメソッドの使用例の間違い、直ってるか誰か知らない?
俺未だにISDNだからベータ落とせない。
前トライしたら途中で切れてばっか。
716:デフォルトの名無しさん
10/03/20 10:53:30
>>712
コピペでマクロ作って社内で高評価
↓
自分で考えなければできないようなことをさせられる
↓
コピペ技術だけじゃどうにもなんねぇ・・・でもまともに組んだことねぇ
↓
そうだ!聞いて教えてもらう←いまここ
↓
結局できない
↓
評価右肩下がり
717:デフォルトの名無しさん
10/03/20 10:54:51
>ISDN
マジか!!
まだいるんだなぁ…
テレホ思い出したわ
つうか、ネカフェとか行ってDLしてくりゃいいんじゃねぇの?
718:デフォルトの名無しさん
10/03/20 11:10:16
かわりにダウンロードしてくれる友達とかいないの?
719:デフォルトの名無しさん
10/03/20 11:12:59
>>717
そんなものあったらすでに行ってるよ。
こちとらド田舎離島だからね。
今度弟にDLしてもらって郵送してもらうかな?
来年は光が開通するんだが。
720:デフォルトの名無しさん
10/03/20 11:14:44
>>718
リロードしなかった。
>>719のとおり。
721:デフォルトの名無しさん
10/03/20 11:24:21
>>714
>番号を付ける
の記述はどうやるんですか?
722:デフォルトの名無しさん
10/03/20 11:33:19
>>721
えっ
回答にちゃんと番号付いてるやん
723:デフォルトの名無しさん
10/03/20 11:34:30
>>715
なんで>>694がレベル高いことになってるんだかさっぱりわからんが、F1で事足りないときの
対処法を言ってるんだが。馬鹿(694)が一人でもいると、自分がマニュアル見ないエクスキューズになるのか?
724:デフォルトの名無しさん
10/03/20 11:36:25
>>722
いや構文の記述法がよく分からないのです
725:デフォルトの名無しさん
10/03/20 11:40:09
プログラマー
RTFMは
遠くになりにけり
726:デフォルトの名無しさん
10/03/20 11:44:44
>>723
レベルが高いをまじにとったか。
昨日Value関連でさんざん罵倒してたのが彼だと思ったからちょい嫌味で書いただけ。
人違いだったらごめんな。
727:デフォルトの名無しさん
10/03/20 11:49:06
>>724
ブラウザをコントロールする方法はいくつかあるから、
まずは自分のやりたい方法というか、試してだめだったプログラムをここにアップして。
そしたら修正点を書くから。
728:デフォルトの名無しさん
10/03/20 11:53:56
ってかここカルシムム不足がいるよね。
あーいえばこういうし困ったもんだ。
729:デフォルトの名無しさん
10/03/20 11:59:21
牛乳飲もう
730:デフォルトの名無しさん
10/03/20 12:05:08
>>727
いくつか試したんですが例えば↓こんな感じです。
Dim objIE As Object
Dim objITEM As Object
Dim nNO As Integer
Dim strRADIO(0 To 5) As String
strRADIO(0) = "1"
strRADIO(1) = "2"
strRADIO(2) = "3"
strRADIO(3) = "4"
strRADIO(4) = "5"
strRADIO(5) = "6"
nNO1 = 1
On Error Resume Next
For Each objITEM In objIE.Document.all
If objITEM.TAGName = "INPUT" Then
If objITEM.Name = "kumiban1" And objITEM.Value = strRADIO(nNO) Then
objITEM.Checked = True
End If
End If
Next