>>424 とりあえず番地(アラビア数字)以降を右に分けるなら
Sub 数字以降を右に移動()
Dim hoge As String, i As Byte
hoge = ActiveCell.Value
Do
i = i + 1
Loop Until Mid(hoge, i, 1) Like "#"
ActiveCell.Value = Left(hoge, i - 1)
ActiveCell.Offset(0, 1).Value = Right(hoge, Len(hoge) - i + 1)
End Sub
下3行を
ActiveCell.Offset(0, 1).Value = Left(hoge, i - 1)
ActiveCell.Offset(0, 2).Value = Right(hoge, Len(hoge) - i + 1)
End Sub
とすれば、元の住所はそのままで、対象セルの1つ右に番地の前、2つ右に番地を振り分けられる。
市区町村名に"市・区・町・村"の文字がある場合に区切り位置がおかしくなることを承知してくれるなら
"市・区・町・村"の文字位置で分割するマクロくらい書いてもいいけど。
全て手動でやるよりはマクロで処理した後、修正した方が早いだろ。
もし欲しかったらデータの範囲を書いてくれ。
426 :
402:2005/04/12(火) 17:55:23
>>425さん
わあ、ありがとうございます。
一個のセル、番地前後で分離できました。
ぶっ飛ばされそうなんですけど、列全体を指定する時は
どのようにしてかくんですか?activerow?
>>426 Sub 数字以降を右に移動()
Dim hoge As String, i As Byte, r As Long
Const c As Byte = 1 '列番号を指定
For r = 1 To Cells(65536, c).End(xlUp).Row
i = 0
hoge = Cells(r, c).Value
Do
i = i + 1
Loop Until Mid(hoge, i, 1) Like "#"
Cells(r, c).Value = Left(hoge, i - 1)
Cells(r, c + 1).Value = Right(hoge, Len(hoge) - i + 1)
Next r
End Sub
列番号は1ならA列、2ならB列、
開始行が1行目からじゃないなら「For r = 1〜」の1を書き換え。
んで、元データそのままで処理するには
Cells(r, c + 1).Value = Left(hoge, i - 1)
Cells(r, c + 2).Value = Right(hoge, Len(hoge) - i + 1)
でよろしく。
住所を県市区町村などで分けたいというのは時々あるけど、
八日市場市とか十日町市とか市川市市川とか今市市今市とかあるので、
データベースを参照しながらじゃないと無理でしょう。
430 :
402:2005/04/12(火) 19:17:03
>>427さん
ほんとにあほ丸だしですみません。
列指定してできました。700件くらいのデータなんですが、
オーバーフローといって50件目で止まってしまいます。
これは50件ごとにマクロをしていくしかないのでしょうか。
お時間あったら教えてください。
>>430 50件の制限というわけではなく、
数字のない住所の位置でオーバーフローしますね。
i = i + 1
の下の行に
If i > Len(hoge) Then Exit Do
を入れてみてください。
これでダメなら止まってしまう位置の住所を貼ってみて。
432 :
402:2005/04/12(火) 19:28:27
>>431さん
早速のご回答ありがとうございます。
できました!これで、郵便番号がふれます…。
ここの方たちみなさんに感謝します。
また教えてくださいね。
>>432 Do
i = i + 1
Loop Until Mid(hoge, i, 1) Like "#" Or i > Len(hoge)
もう見てないかもしてないけどこれの方が良かったかも。
結果は同じはずだけど、こっちの方がちょっと処理早いかな。
ついでに気が向いたら、最初に
Application.ScreenUpdating = False
最後に
Application.ScreenUpdating = True
を入れておくとより処理が早くなる。
435 :
402:2005/04/12(火) 19:37:33
>>423 406じゃないけど、ググって作ってみた。
自信は無いけどどうだろう?
文字を取り出してもテーブルの区切りがわからんので、
スペースがセルの中にあると思った結果にならない。
MSFormsを参照してるのと、
クリップボードの形式を事前に調べてはいない。
Dim cc As New MSForms.DataObject
Dim s, t
Dim i As Integer
Dim j As Integer
cc.GetFromClipboard
s = Split(cc.GetText(1), vbCrLf)
For i = 0 To UBound(s)
t = Split(s(i))
For j = 0 To UBound(t)
ActiveCell(i + 1, j + 1) = t(j)
Next j
Next i
----------------------------------------------------
ここまで読んだ。ここまで読んだ。ここまで読んだ。ここまで読
----------------------------------------------------
Dim oHttp As Object
Dim s
Dim i
Set oHttp = CreateObject("MSXML2.XMLHTTP")
oHttp.Open "GET", "
http://www.yahoo.co.jp", False
oHttp.Send
s = Split(oHttp.responseText, vbCrLf)
For i = 0 To UBound(s)
Cells(i + 1, 1) = s(i)
Next i
----------------------------------------------------
んだ。ここまで読んだ。ここまで読んだ。ここまで読んだ。ここま
----------------------------------------------------
439 :
405:2005/04/13(水) 07:36:20
>>436 また情報後出しとか言われそうだけど、自分が以前書いたマクロです。
Dim myData As New DataObject
Dim w As Variant, i As Integer
myData.GetFromClipboard
w = Split(myData.GetText, vbCrLf)
For i = 0 To UBound(w) - 1
Range(ActiveCell.Offset(i, 0), ActiveCell.Offset(i, UBound(Split(w(i))))) = Split(w(i))
Next i
>>436と同じような物ですが、
>>414でも書いた通りDataオブジェクトを使って
クリップボードの値を取得すると繋がった文字列になってしまいます。
区切り位置に半角スペースが入るのでそこで分割しただけだけど、
自分がコピーしたい表には半角スペースが含まれないことの方が希なので全く使い物になりませんでした。
>>423の言うとおり、速度面の問題もあるのでなんとか
「VBAからHTMLDocumentオブジェクトを使って、HTMLテーブルセルの値を直接Excelのセルに書きこむ方法」
を実現したいのですが、コピーしたhtmlデータをどうやってテーブル区切りで取得させるかが全く解らない状況です。
かなり頻繁に検索を使うのですが、グーグルの検索ツールバーのようにツールバーに検索窓を追加
するようなことは出来るのでしょうか?
441 :
405:2005/04/13(水) 08:16:05
443 :
406:2005/04/13(水) 15:02:00
>>439 405さんに質問です。
コピー元(HTML)のセルは1つのテーブル<table>〜</table>全体ですか?
それともテーブルの中の一部分のセルですか?
前者であれば表示中のHTMLDocumentからtableエレメントオブジェクトを特定し、
Rows(i)Cells(j).innerTextでエクセルライクに値を取得できますが、
後者だとdocument.selection.createRange().htmlText等で
選択範囲のHTML文字列を取得し、<tr><td>タグを解析して縦横の値を
自力で取り出す必要があるかと。
なお、これらの方法ではクリップボードは不用です。
いずれにしてもコピー元のHTMLの構造が一定であればプログラミング可能ですが、
不特定のHTMLのテーブルセル文字列を汎用的にExcelの選択セル等に埋め込むような
ルーチンを作るのはかなり大変だと思いますです。
444 :
405:2005/04/13(水) 15:42:14
>>443 テーブルの中の一部分のセルです。
Webブラウザから表の一部をコピーしたあと、どのようにすれば良いのでしょうか?
VBAは初歩的なことしか解らないので
>>443の解説だけでは
無能な自分には全く理解出来ません。
ローカルのhtmlから表全体を取得するならなんとかなるけど
いちいちローカルに保存するくらいなら、今までの方法の方が早いし。
コードを書いていただけるとありがたいのですが、
失礼ながら406氏も具体的なコードは書けないというなら、ここで期待して待つのはやめて、
何とか出来るところまで足掻いてみます。最後にはあきらめることになるだろうけど・・・
445 :
名無しさん@そうだ選挙にいこう:2005/04/13(水) 15:51:47
WindowsXp・Excel2003ですが
新規のシートの状態から29行、E列ぐらいでセルを埋めて表を作ったんですが
そのまま普通に印刷すると29行目ぐらいがA4の真ん中ぐらいになるのですが
これの縦横をA4の用紙にいっぱいに自動で合わせて印刷するには
どう操作すればよいでしょうか?
>>444 具体的にURLとどの部分をコピーしたいのか書いたほうが早いと思うよ。
447 :
405:2005/04/13(水) 15:59:22
>>446 Webページから表をコピペしたいことが多いというだけで、
利用するサイト、ページは特に決まってません。
でも、ExcelにHTML張り付けした場合はどの表でもWebブラウザの表示と同じになるので
ソースの記述が多少違っても、1つで可能なら理論上は全てに通ずるはずですよね。
ExcelにHTML張り付けしても崩れるようなものは例外かもしれないけど。
お伺いしたいのですがEXCELのシート数の制限は何枚でしょうか?
ある競技の集計ソフトを作成中でVBAで成績速報を新規シートで出力していますが
種目が多く枚数が増えるため速報のシートが31枚以上は追加出来ません
本体のシートは参照データベースや入力シート等で既に59枚あります
一度保存し再度ブックを立ち上げるとリセットされる見たいですが
私が運用するのではなく競技大会のの運営者が使用するので
なるべくトラブルを回避したいと思い質問させて頂きます
OS WindowsXP HOME
Microsoft Office Excel 2003です
>>448 物理メモリ容量、及びシート内容依存です。
シートが追加できないなら、それがおそらくあなたの環境でのシート数限界です。
>>449 ご回答有り難うございます
うっかりしていましたメモリ512Mです
>物理メモリ容量、及びシート内容依存です。
判りました対策を考えます
VBAの質問です。
For i = 10 To 1 Step -1
For j = 1 To 10
If Cells(i, j).Value = hoge Then
処理
Exit For A
End If
Next j
@
Next i
このようにForを2段使っていて、ある条件を満たしたら何らかの処理をして
Forを抜けたい場合、上のコードだとFor jは抜けられるけどFor iは抜けられませんよね。
この場合、Gotoを使ったりこのFor文以降の処理を別プロシージャにしたり@の部分にコードを入れたりせず、
Forの2段目のIf文内(Aの位置)だけのコードでFor iを抜けるにはどうすれば良いでしょうか?
実用上困ってるというわけではなく、興味があっただけなのですが、
何か方法があるなら知っておきたいのでご存じの方が居りましたらご教授ください。
453 :
名無しさん@そうだ選挙にいこう:2005/04/13(水) 17:46:33
>453
「実用上困ってるというわけではなく」
って書いてあるぢゃん
ちゃんと嫁よw
なぜgoto以外の方法が知りたいのかはわからんが
>>447 Excelのクリップボードの内容って、
Webページを入れた場合も、テキスト入れた場合も同じじゃない?
>456
をいをい・・・
同じだったらhtml形式での張り付けすら出来ないだろ
つーか「Excelのクリップボード」って何よ?
クリップボードは全ソフト共通ですが、何か?
奴も言ってる通りDataObjectで取得した場合はテキスト扱いになるけどな
>>451 その部分をFunctionに記述してExitするぐらいかな。
そうするメリットは感じられないが。
>>457 Excelはhtml、xmlで処理してなかったっけ?
htmlのソースコードをExcelに貼り付けてみて。
460 :
名無しさん@そうだ選挙にいこう:2005/04/13(水) 21:50:57
関数の質問です。OSはXPでエクセルは2003です。
質問の内容ですが・・
A B C D E
1 SH900i ドコモ 999
2 902SH ボータ 223
3 W31SA au 582
4 ・ ・
5 ・ ・
このような形でA・B・C列に400行データが入っています。
Aが商品名でBがメーカーでCが販売数となっています。これをD・E・F行
にTOP10だけ出したいのですが、対応出来る関数はありますでしょうか?
D E F
1 ドコモ SH900 999
2 ドコモ D900 870
3 ドコモ N900 825
・ ・ ・ ・
11 ボーダ 902SH 999
12 ボーダ 802SE 650
13 ボーダ 603SH 540
・ ・ ・ ・
21 au w31SA 920
22 au w21H 650
23 au ・ ・
みたいな感じにしたいのです
461 :
名無しさん@そうだ選挙にいこう:2005/04/13(水) 23:32:20
体重測定のExcelをつくりたいと思っているのですが
流れ的には
-------------------------------------
4月 5月 6月 〜
スズキイチロウ 55kg 57kg 54kg
ヤマダハナコ 44kg 45kg 42kg
タナカタロウ 32kg 30kg 36kg
-------------------------------------
というデータを作成して、
200名分くらいをA5の紙に一人一人グラフで
出力するという感じで考えているんですけれど、
Sheet1部分がデータベース部分
Sheet2にグラフを表示、印刷部分
という風に考えたのですが、
どうもあきらかにSheet2の部分が能率的ではなさすぎるなあという感じです。
マクロとかがよくわからないので、下地は地道にコピペでつくるという(泣)感じなのですが。
こういうものをつくろうとした時に参考になりそうなページはございませんでしょうか?
またこれをすっきりさせるためにはどういう方法がありますか?
> こういうものをつくろうとした時に参考になりそうなページはございませんでしょうか?
ヘルプ
>>438 前スレ950までしか見てないんだけど、
デザインモードは試したの?
464 :
名無しさん@そうだ選挙にいこう:2005/04/14(木) 00:02:51
465 :
名無しさん@そうだ選挙にいこう:2005/04/14(木) 00:21:02
>>460 Dをドコモの列: =if(B1="ドコモ",C1,"")
Eをボーダの列: =if(B1="ボーダ",C1,"")
FをAUの列: =if(B1="AU",C1,"")
として、キャリア別の台数を抜き出す。
次にRANK()関数でそれぞれのキャリア内での順位を出しておく。
(G列とかね)
最後にVLOOKUPで順位からデータの並べ替えを行なう。
この場合、同じ台数となっているデータはうまくいかない w
素直にソートを使って加工するのが早そうでつ。
(別にVBAでもいいが)
466 :
名無しさん@そうだ選挙にいこう:2005/04/14(木) 00:25:05
エクセルはADOを使ってMDBにアクセスできるけど
ファイルメーカーのデータベースにアクセスする方法ってある?
467 :
名無しさん@そうだ選挙にいこう:2005/04/14(木) 01:33:53
エクセルで作った表を印刷しようとすると横に長いために二枚組になってしまいます。
用紙を90度回転させて印刷すれば解決できるのですが、
回転させないでそのまま「用紙の横サイズに合わせて縮小する」みたいな
便利なコマンドってないのでしょうか?
>>467 ページ設定>ページ>次の次数に合わせて印刷 横「1」×縦「1」
469 :
463:2005/04/14(木) 06:35:52
470 :
名無しさん@そうだ選挙にいこう:2005/04/14(木) 07:01:43
>>465 やはり、そうなってしまいますか・・現状は同じような設定をしてたもので
自分でももうちょい、VBAとかで試してみます。ありがとうございました
VBAで指定セルの文字のバイト数を取得したいんですが
VBA関数のLenBでは半角文字も2バイトになってしまうし
なぜかWorksheetFunction.LenB()も使えない。
作業セルを設けて.Formula = "=LenB()"とやるのではなく
VBAコードのみで文字列のバイト数を求めるにはどぷすればいいでしょうか?
Excel97〜2002まで使える方法を教えてください。
473 :
471:2005/04/14(木) 09:58:43
>>472 LenB(StrConv(Cells(1, 1).Value, vbFromUnicode))
でバッチリいけました。ありがとうございます。
エクセルのエンコードはどこで指定したらよいのでしょうか。