• ベストアンサー

1つのセルに入ってる中身を項目ごとに分けてCOUNTIFで下までコピーする方法?

シート1のC列に↓のようなセルがあります。1つのセルに収まってます。 12レースまであります。1レース分だけ貼り付けました。 11/11(土) 3回 福島 7日目 競馬新聞を見る 1R 未勝利 2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50 本賞金:500、200、130、75、50万円 馬名 性齢 負担 騎手 重量 アルナスライン 牡2 55 柴山雄一 エドノダンス 牡2 55 石橋脩 グラントリアノン 牡2 55 藤岡佑介 クリノオンディーヌ 牝2 54 武士沢友 サンキストゴールド 牡2 55 田嶋翔 タイセイディーバ 牝2 53 ☆鮫島良太 チアズジョイ 牡2 55 中舘英二 バンブーソクラテス 牡2 55 佐藤哲三 フィジカル 牡2 52 ▲千葉直人 プライドイズハート 牡2 55 福永祐一 マイネルグラナーテ 牡2 55 スボリッ マイネルテアトロン 牡2 52 ▲佐藤聖也 リキアイアチーブ 牝2 54 西田雄一 リュウシャルマン 牝2 53 ☆吉田隼人 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 ここで質問して回答いただいたのと同じようなことをしたいのですが、やり方が分かりません。 各項目は半角で空いています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

補足拝見しました。レース毎の行数は等間隔ではなく、各馬の横にもその馬の情報が出ていてほしいのですね。 全部マクロの中に仕込んでしまいました。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を選択し、そのまま下へコピーしてください。 これでうまくいかないでしょうか?

masaro55
質問者

お礼

回答ありがとうございました。

masaro55
質問者

補足

ほとんどうまくいきました。ありがとうございます。 場所の項目だけおかしくなりました。 その部分は 福島 とかになったら正しいのですが、5回 とかになってしまいました。 訂正できましたらよろしくお願いします。 

その他の回答 (6)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.7

補足通知のメールを見てやっとわかりました。 このサイトでは連続する空白を勝手に1つにまとめて表示してしまうので、わかりませんでした。 11/18(土) 5回 東京 5日目 の11/18(土)と5回の間に、空白が2つあるのに、画面からコピーすると1つしかなかったので計算が狂ってしまっていました。 マクロの、 Case "場所"   GetInfo = ItemList1(2) という箇所を、   GetInfo = ItemList1(3) と変えてください。 その後、自動的には変更が反映されないので、K1を選択して下にコピーの作業を行ってください。場所に変わるはずです。

masaro55
質問者

お礼

回答ありがとうございました。 ばっちりできました。 度重なる回答に感謝感謝です。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.6

> 場所の項目だけおかしくなりました。 > その部分は 福島 とかになったら正しいのですが、5回 > とかになってしまいました。 あれ、私のところではちゃんと表示されたのですが…。 各レース情報の1行目の、空白で区切られた3つめの項目、として取りだしているのですが。念のため、何レース分か最初の3行だけ貼り付けていただけないでしょうか。

masaro55
質問者

補足

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回  と表示されてしまってます。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

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~に表示するのでしょうか。 以上、補足をお願いします。

masaro55
質問者

補足

24行おきというかその間は馬名が入ってるので頭数によって何行おきかは変わります。 馬名のすぐ横にレース条件 日付=11/11(土) 場所=福島 レース数=1R 距離=芝1800m 頭数=14頭 レース名=未勝 以上の項目を持ってきたいのです。 レース条件をつねにそのレースに出る馬の横に持ってきたいのです。 レースが変わるとピッタリレース条件も変わって馬名の横に持ってきたいのです。 ですので、馬名の横のJ~Oの6つのセルには常にそのレースのレース条件が出てる状態にしたいのです。   そんな感じで何行あってもコピーして問題なくできるようにしたいのです。 よろしくお願いします。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

察するに要は1セル内に空白区切りで入っているデータを空白ごとに分断し そのセル及び左側に振り分けたい という事でしょうか? エクセルですよね 特に関数に拘らず結果のみで良いなら 振り分けたい元データの入っているセル列範囲を全て選び 上のデータプルダウンメニューから「区切り位置」を選び 現れた「区切り位置指定ウイザード 1/3」のウインドウを右下のボタンで次へ つぎに現れた「区切り位置指定ウイザード 2/3」のウインドウ上段中程にある「区切り文字」の所にある「スペース」の左をクリックしてチェックを入れ そのまま右下の「完了」ボタンで終了させてください その後今データを振り分けたセル郡の更に右の上隅から順に 1行だけに必要な追加データを追記し必要分だけ下へコピーしていけば良いと思います もし関数での自動化が必要なら仰って頂ければ 暇なときでよければ頑張ってみますが このフォーマットだとセルの比喩的表現で 「今、自分が何レース目のデータを表示するべきなのか?」 を割り出すだけでちょっとした長さになってしまいます で、この情報は恐らく1つの構文中何回も使います しかしこの情報は予備資料でしかないので 当然他の本来主眼となる情報も割り出さないといけないので かなりの長さの構文となりそうです 競馬というのはほぼ毎日やっているのですよね? 1レース16頭立てとして一日12レースですから ほぼ1年で1シート(65535行×7cell)埋まってしまいます 結構挙動が鈍重になるかも知れませよ? あとエクセルは与えられていない情報を割り出すのはほぼ無理です なので貴方がレース数・距離・頭数・レース名等の情報を知っていても それはエクセルに教えてあげないと 当然エクセルは分りません まあエクセルでなくとも他人が何を見ているかなんて判らないでしょうけどね (~ ~;)ヾ この点は式だけではどうにもならなさそうですね 何処かのサイトに載っている情報から引っ張ってきても良いですが エクセルは外部ファイルを参照させるとかなり鈍重になりますからこれもお勧めできません 以上のことを踏まえて ・フォーマットを変更する ・一部手入力する ・鈍重でも良いから自動化する(暇なときでよければ要望頂ければ関数式は考えますよ) ・第4案を模索する の中から一度再考頂ければと思います

masaro55
質問者

お礼

回答ありがとうございました。

masaro55
質問者

補足

>競馬というのはほぼ毎日やっているのですよね? 週に2日だけ土日にやってます。 >エクセルですよね エクセルです。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。補足拝見しました。 11/11(土) 3回 福島 7日目 競馬新聞を見る 1R 未勝利 2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50 は、C1にこの順番で同じセルに入っているのですよね?その認識で書いたはずなのですが…。 どのようにうまくいかなかったのか、状況を教えていただけると、またアドバイスできるかもしれません。(○○というエラーメッセージが出たとか、何も表示されないとか、表示はされたが全然違う項目が出た、などなど)

masaro55
質問者

お礼

回答ありがとうございます。

masaro55
質問者

補足

すいません。質問の段階で間違ってました。 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レース分まで続いています。 よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

各項目が半角スペース区切りで、並び順が決まっているのなら、ユーザ定義関数を作って任意の項目を取りだした方が早いですね。 【手順】 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) この後、このファイルを開くときに「このファイルにはマクロが…」というメッセージが出てくるかもしれませんが、そのときは「マクロを有効にする」をボタンを押してください。

masaro55
質問者

お礼

回答ありがとうございました。

masaro55
質問者

補足

2歳 ○混□指(馬齢) 芝1800m 14頭 発走:9:50 この部分と 1R 未勝利 この部分と 11/11(土) 3回 福島 7日目 は1つのセルに収まっています。 後、C列に馬名がくるようにしたいのでA列とB列は空けてあります。 教えてもらったのをやったのですが、うまくいきませんでした。 なにが間違ってるんでしょうか…。

関連するQ&A

専門家に質問してみよう