1つのセルに入ってる中身を項目ごとに分けてCOUNTIFで下までコピーする方法?
シート1のC列に↓のようなセルがあります。1つのセルに収まってます。
12レースまであります。1レース分だけ貼り付けました。
11/11(土) 3回 福島 7日目競馬新聞を見る
1R 未勝利
2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50
本賞金:500、200、130、75、50万円
馬名性齢負担騎手
重量
アルナスライン牡255柴山雄一
エドノダンス牡255石橋脩
グラントリアノン牡255藤岡佑介
クリノオンディーヌ牝254武士沢友
サンキストゴールド牡255田嶋翔
タイセイディーバ牝253☆鮫島良太
チアズジョイ牡255中舘英二
バンブーソクラテス牡255佐藤哲三
フィジカル牡252▲千葉直人
プライドイズハート牡255福永祐一
マイネルグラナーテ牡255スボリッ
マイネルテアトロン牡252▲佐藤聖也
リキアイアチーブ牝254西田雄一
リュウシャルマン牝253☆吉田隼人
J3=IF(COUNTIF(C1,"*競馬"),LEFT(C1,2),J2)
これを↑こういうので
日付=11/11(土)
場所=福島
わけてJ列K列にそれぞれ表示させて↓までコピーしたいのです。
あと
レース数=1R
距離=芝1800m
頭数=14頭
レース名=未勝
以上の項目もそれぞれで1列ずつ使って分けて下までコピーしたいのですがどうすればよいでしょうか?
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2046491
ここで質問して回答いただいたのと同じようなことをしたいのですが、やり方が分かりません。
各項目は半角で空いています。
よろしくお願いします。
回答(7件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
補足通知のメールを見てやっとわかりました。
このサイトでは連続する空白を勝手に1つにまとめて表示してしまうので、わかりませんでした。
11/18(土) 5回 東京 5日目
の11/18(土)と5回の間に、空白が2つあるのに、画面からコピーすると1つしかなかったので計算が狂ってしまっていました。
マクロの、
Case "場所"
GetInfo = ItemList1(2)
という箇所を、
GetInfo = ItemList1(3)
と変えてください。
その後、自動的には変更が反映されないので、K1を選択して下にコピーの作業を行ってください。場所に変わるはずです。
この回答へのお礼
回答ありがとうございました。
ばっちりできました。
度重なる回答に感謝感謝です。
> 場所の項目だけおかしくなりました。
> その部分は 福島 とかになったら正しいのですが、5回
> とかになってしまいました。
あれ、私のところではちゃんと表示されたのですが…。
各レース情報の1行目の、空白で区切られた3つめの項目、として取りだしているのですが。念のため、何レース分か最初の3行だけ貼り付けていただけないでしょうか。
この回答への補足
11/18(土) 5回 東京 5日目
1R 未勝利
2歳 ○混□指(馬齢) ダ1400m 16頭 発走:9:50
11/19(日) 6回 京都 6日目
5R 新馬
2歳 ○混□指(馬齢) 芝2000m 12頭 発走:12:20
11/19(日) 6回 京都 6日目
11R マイルCS(G1)
3歳上 ○国際○指(定量) 芝1600m 18頭 発走:15:40
↑最初の三行貼り付けました。よろしくお願いします。
K列は全部 5回 とか 6回
と表示されてしまってます。
No.5ベストアンサー20pt
補足拝見しました。レース毎の行数は等間隔ではなく、各馬の横にもその馬の情報が出ていてほしいのですね。
全部マクロの中に仕込んでしまいました。No.1の回答の手順で貼り付けたマクロを、以下のものに入れ替えてください。
Function GetInfo(R As Integer, S As String) As String
Dim CurrentInfo As Range, Info As Range
If Cells(R, 3) = "" Then
GetInfo = ""
Exit Function
End If
Set CurrentInfo = Range("C1")
For Each Info In Range("C1", Range("C65535").End(xlUp))
If Info.Value Like "*/*(*)*" Then
If Info.Row > R Then
Exit For
Else
Set CurrentInfo = Info
End If
End If
Next
Dim ItemList1, ItemList2, Itemlist3
ItemList1 = Split(CurrentInfo.Value, " ")
ItemList2 = Split(CurrentInfo.Offset(1, 0).Value, " ")
Itemlist3 = Split(CurrentInfo.Offset(2, 0).Value, " ")
Select Case S
Case "日付"
GetInfo = ItemList1(0)
Case "場所"
GetInfo = ItemList1(2)
Case "レース数"
GetInfo = ItemList2(0)
Case "距離"
GetInfo = Itemlist3(2)
Case "頭数"
GetInfo = Itemlist3(3)
Case "レース名"
GetInfo = ItemList2(1)
Case Else
GetInfo = "???"
End Select
End Function
そして、J1~O1に以下のように入力してください。
J1 =GetInfo(ROW(),"日付")
K1 =GetInfo(ROW(),"場所")
L1 =GetInfo(ROW(),"レース数")
M1 =GetInfo(ROW(),"距離")
N1 =GetInfo(ROW(),"頭数")
O1 =GetInfo(ROW(),"レース名")
そしてJ1からO1を選択し、そのまま下へコピーしてください。
これでうまくいかないでしょうか?
この回答への補足
ほとんどうまくいきました。ありがとうございます。
場所の項目だけおかしくなりました。
その部分は 福島 とかになったら正しいのですが、5回
とかになってしまいました。
訂正できましたらよろしくお願いします。
この回答へのお礼
回答ありがとうございました。
No.1です。補足拝見しました。
> 11/18(土) 5回 東京 5日目
> 2R 未勝利
> 2歳 □指(馬齢) 芝1400m 13頭 発走:10:20
> ↑この部分がまたC25~C27にあるという感じで12レース分まで続いています。
ということは、各レースの情報が24行おきに入っていると考えてよろしいでしょうか。その次はC49~C51、またその次はC72~C73というように、12レース分あるということですか?
そして、最初のレースの情報をJ1、K1~に表示するとして、それ以降のレースの情報は連続してJ2、K2~、J3、K3~、最後はJ12、K12~に表示するのでしょうか。それとも次の2レース目はJ25、K25~に表示するのでしょうか。
以上、補足をお願いします。
この回答への補足
24行おきというかその間は馬名が入ってるので頭数によって何行おきかは変わります。
馬名のすぐ横にレース条件
日付=11/11(土)
場所=福島
レース数=1R
距離=芝1800m
頭数=14頭
レース名=未勝
以上の項目を持ってきたいのです。
レース条件をつねにそのレースに出る馬の横に持ってきたいのです。
レースが変わるとピッタリレース条件も変わって馬名の横に持ってきたいのです。
ですので、馬名の横のJ~Oの6つのセルには常にそのレースのレース条件が出てる状態にしたいのです。
そんな感じで何行あってもコピーして問題なくできるようにしたいのです。
よろしくお願いします。
No.3ベストアンサー10pt
察するに要は1セル内に空白区切りで入っているデータを空白ごとに分断し
そのセル及び左側に振り分けたい
という事でしょうか?
エクセルですよね
特に関数に拘らず結果のみで良いなら
振り分けたい元データの入っているセル列範囲を全て選び
上のデータプルダウンメニューから「区切り位置」を選び
現れた「区切り位置指定ウイザード 1/3」のウインドウを右下のボタンで次へ
つぎに現れた「区切り位置指定ウイザード 2/3」のウインドウ上段中程にある「区切り文字」の所にある「スペース」の左をクリックしてチェックを入れ
そのまま右下の「完了」ボタンで終了させてください
その後今データを振り分けたセル郡の更に右の上隅から順に
1行だけに必要な追加データを追記し必要分だけ下へコピーしていけば良いと思います
もし関数での自動化が必要なら仰って頂ければ
暇なときでよければ頑張ってみますが
このフォーマットだとセルの比喩的表現で
「今、自分が何レース目のデータを表示するべきなのか?」
を割り出すだけでちょっとした長さになってしまいます
で、この情報は恐らく1つの構文中何回も使います
しかしこの情報は予備資料でしかないので
当然他の本来主眼となる情報も割り出さないといけないので
かなりの長さの構文となりそうです
競馬というのはほぼ毎日やっているのですよね?
1レース16頭立てとして一日12レースですから
ほぼ1年で1シート(65535行×7cell)埋まってしまいます
結構挙動が鈍重になるかも知れませよ?
あとエクセルは与えられていない情報を割り出すのはほぼ無理です
なので貴方がレース数・距離・頭数・レース名等の情報を知っていても
それはエクセルに教えてあげないと
当然エクセルは分りません
まあエクセルでなくとも他人が何を見ているかなんて判らないでしょうけどね (~ ~;)ヾ
この点は式だけではどうにもならなさそうですね
何処かのサイトに載っている情報から引っ張ってきても良いですが
エクセルは外部ファイルを参照させるとかなり鈍重になりますからこれもお勧めできません
以上のことを踏まえて
・フォーマットを変更する
・一部手入力する
・鈍重でも良いから自動化する(暇なときでよければ要望頂ければ関数式は考えますよ)
・第4案を模索する
の中から一度再考頂ければと思います
この回答への補足
>競馬というのはほぼ毎日やっているのですよね?
週に2日だけ土日にやってます。
>エクセルですよね
エクセルです。
この回答へのお礼
回答ありがとうございました。
No.1です。補足拝見しました。
11/11(土) 3回 福島 7日目 競馬新聞を見る
1R 未勝利
2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50
は、C1にこの順番で同じセルに入っているのですよね?その認識で書いたはずなのですが…。
どのようにうまくいかなかったのか、状況を教えていただけると、またアドバイスできるかもしれません。(○○というエラーメッセージが出たとか、何も表示されないとか、表示はされたが全然違う項目が出た、などなど)
この回答への補足
すいません。質問の段階で間違ってました。
C1に
11/11(土) 3回 福島 7日目 競馬新聞を見る
1R 未勝利
2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50
↑これが全部入っているのじゃなくて
正しくは
11/11(土) 3回 福島 7日目 競馬新聞を見る
この部分がC1
1R 未勝利
この部分がC2
2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50
この部分がC3
でした。
11/18(土) 5回 東京 5日目
2R 未勝利
2歳 □指(馬齢) 芝1400m 13頭 発走:10:20
↑この部分がまたC25~C27にあるという感じで12レース分まで続いています。
よろしくお願いします。
この回答へのお礼
回答ありがとうございます。
各項目が半角スペース区切りで、並び順が決まっているのなら、ユーザ定義関数を作って任意の項目を取りだした方が早いですね。
【手順】
1.Excelの画面からAlt+F11キーを押して、マクロの入力画面を出します。
2.その画面のメニューから「挿入」>「標準モジュール」を選択します。
3.右の入力画面に、以下のマクロをコピーして貼り付けます。
Function GetInfo(S As String, N As Integer)
Dim ItemList As Variant
ItemList = Split(S, " ")
GetInfo = ItemList(N - 1)
End Function
4.Excelの画面に戻り、J1~O1まで以下の通りに入力します。
J1 =GetInfo(C1,1)
K1 =GetInfo(C1,3)
L1 =GetInfo(C1,6)
M1 =GetInfo(C1,10)
N1 =GetInfo(C1,11)
O1 =GetInfo(C1,7)
この後、このファイルを開くときに「このファイルにはマクロが…」というメッセージが出てくるかもしれませんが、そのときは「マクロを有効にする」をボタンを押してください。
この回答への補足
2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50
この部分と
1R 未勝利
この部分と
11/11(土) 3回 福島 7日目
は1つのセルに収まっています。
後、C列に馬名がくるようにしたいのでA列とB列は空けてあります。
教えてもらったのをやったのですが、うまくいきませんでした。
なにが間違ってるんでしょうか…。
この回答へのお礼
回答ありがとうございました。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












