• 締切済み

一行の中から複数の値を抜き出す。

mt2008の回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.8

いっぱい回答が付いているのでいまさら感が有りますが、VBAでやる場合です。 前提は、 ・宿泊者名はかならず「様」が付く ・月跨ぎは前の月の最終日は「→」(月末にチェックインの場合は宿泊者名)で終わり、次の月の1日は「→」または「退」で始まる ・年跨ぎは無い。 ・名簿のシート名は「4月」~「3月」で、12か月分ちゃんとある 宿泊一覧.xlsm に以下のコードを入れて実行してください。 宿泊一覧ブックの1枚目のシートのA2以下に名前とイン、アウトを貼り付けます。 日数や泊数はExcelの演算式で出してください。 Sub Sample()   Dim vData()     nCount = 0 '宿泊総回数   nLastRow = 5 '使用している最終行(実際の名簿に合わせて変える)      Application.ScreenUpdating = False   Workbooks.Open Filename:="C:\名簿.xlsx" '実際の保存場所に合わせて修正   With ActiveWorkbook     For i = 3 To nLastRow '列ごとに処理(データは3行目から有るものとしています)       For j = 0 To 11 '「4月」~「3月」までの月別シートごとに処理         sShtName = Month(DateAdd("M", j, "4/1")) & "月" '対象シート名         For k = 2 To 32 '日にち毎にチェック(手抜きで2月も小の月も31日分チェック)           sData = .Sheets(sShtName).Cells(i, k).Value           Select Case True           Case sData Like "*様" 'セルの値に「様」を含んでいればチェックイン             ReDim Preserve vData(2, nCount)             vData(0, nCount) = sData             vData(1, nCount) = .Sheets(sShtName).Cells(1, k).Value                      Case sData = "退" 'セルの値が「退」ならチェックアウト             vData(2, nCount) = .Sheets(sShtName).Cells(1, k).Value             nCount = nCount + 1           End Select         Next k       Next j     Next i     .Close   End With   '行列を入れ替えて宿泊一覧に貼り付け   vData2 = Application.WorksheetFunction.Transpose(vData)   Worksheets(1).Range("A2:C" & nCount) = vData2   Application.ScreenUpdating = True End Sub

関連するQ&A

  • 一列から複数の範囲の値を抜き出す方法。

    エクセルを使用し、画像の左側のような表を作っています。説明の為、短くしてありますが実際のファイルは横にずらーっと日付が並んでおり、一年で一つのファイルです。 部屋番号も下に10ほど並んでおります。 画像を一枚に収めるために、表を二つ入れてありますが、実際にはこの二つの表は別々のファイルにしたいです。(左側の表のファイル名を名簿.xlsxlとします) 名簿.xlsxを別のエクセルファイル(宿泊一覧.xlsx)から読み込んで、 名簿.xlsxから宿泊者名を自動で抜き出して、滞在日数や泊数を計算させて表を作成させることは可能でしょうか? 画像を一枚に収めるために、表を二つ入れてありますが、実際にはこの二つの表は別々のファイルにしたいです。 名簿.xslxをどんどん更新すると、宿泊一覧にも名前が更新されるようにしたいのですが、関数だけではできないものなんでしょうか? VBAはよくわからないので、できれば関数でやるやり方を教えて頂ければありがたいです。

  • Excel:数式のブック名部分を関数にしたい

    今エクセル作業ですごく悩んでいることがあります。 色々調べたのですが、エラーになってしまうので、関数等に詳しい方に質問があります。 作業中のエクセル画面を簡単に再現した画像を添付するので、それを参照していただきたいのですが、 Dドライブの「資料フォルダ」に  2009.11東京一覧表 2009.11神奈川一覧表  2009.10東京一覧表 2009.10神奈川一覧表  2009.9東京一覧表 2009.9神奈川一覧表 などというエクセルファイルが沢山あるとします。 (ファイル名にピリオドを入れない方がいいのは存じていますので今回は気にしないでください) そして、現在作成中のエクセルの、B3にフォルダ内のエクセルブック名の年月の部分、C3に店舗名部分を入れると、C6にそのブック名の一覧表の「名簿」シートのB8セルの値が表示されるようになる、関数をお伺いしたいのです。 例えば、B3に「2009.11」C3に「東京」と入れると、C6に「2009.11東京一覧表」ブックの「名簿」シートのB8セルの値が出る・・・という感じです。 分からないながらに、自分でブック名の中に関数(セル番地?)を入れて   ='D:\資料フォルダ\[B3&C3&"一覧表.xls"]名簿'!$B$8 などと入力してみたのですが、[ ]の部分に関数(セル番地?)を入れると、エラーになってしまいました。 色々調べてINDIRECT関数というものを使ってみたりしたのですが、全くうまくいきません。 どうすれば希望通りに値が出るようになるか、お分かりの方は知恵をお貸しください。 どうかよろしくお願いします。

  • エクセルでセル参照元のファイル名に*を使いたい

    お世話になります。 別ファイルのエクセルシートの特定のセルを参照させたいのですが、下記のようにファイル名の後にワイルドカードを使う方法はないのでしょうか? =[HH一覧表.xlsx]Sheet1!$B$5 ⇒ =[HH一覧表*.xlsx]Sheet1!$B$5 「HH一覧表 1月・・・」というようにファイル名がHH一覧表から始まる複数のファイルが有って、そのファイルを開いた時に別のエクセルに指定のセルを参照させたいのですが、何か方法は無いでしょうか? VBAのコードは教えてもらったのですが、ハードルが高く簡便法を探しています。

  • エクセルで複数の条件を満たした値を返す関数を教えてください。

    エクセルで複数の条件を満たした値を返す関数を教えてください。 (画像を添付しました) 左の表(A1からD9)のデータを右の表でIDと製品を選択すると 会社名、名前が抽出するような関数を教えてください。 INDEXやMATCHなど使ってみたんですが、組み方が悪いのかうまく抽出できませんでした。 よろしくお願いします。

  • ハイパーリンクを自動で貼る

    本.xlsxというエクセルファイルのB列に データが並んでいるのですが、 本一覧.xlsxというエクセルファイルで 本.xlsxのB1の値で検索をかけて、見つかった そのセルナンバーを覚えて、本.xlsxのA1に こんな感じで [本一覧.xlsx]本一覧!c1835 ハイパーリンクをつけていっているのですが、 数がかなりあり、手動ではとても時間がかかってしまいます。 これをやることができる関数があれば教えてください。 他にマクロなど別の方法があればそちらでもかまいませんので、 よろしくお願いします。

  • エクセルで強制終了後の修復データが値の更新が出る

    エクセルで強制終了になり修復データを開きました。 すると関数の参照がおかしく正しく反映がされません。 ●正しい参照  '[商品情報 一覧表.xlsx]ピックアップ'!G8 ●修復後の参照  'C:\Users\master\AppData\Roaming\Microsoft\Excel\[商品情報 一覧表.xlsx]ピックアップ'!G8 C:\Users\master\AppData\Roaming\Microsoft\Excel に商品情報 一覧表のデータを置き開くと 正しい参照になりますが閉じると元に戻ります。 C:\Users\master\AppData\Roaming\Microsoft\Excel の文字を消しても消えません。 元に戻す方法はないでしょうか?

  • [EXCEL]外部エクセルの値の参照

    複数のエクセルファイルがあり、それぞれパスやファイル名が異なります。それぞれのファイルのパスの一覧の情報値を元に、各ファイルの指定セルを取得する関数はないでしょうか? indirect関数を用いた場合、そのファイルを開いておかなければならい欠点があるため、良い方法があればアドバイスを頂ければと思います。

  • VLOOKUP関数で得られた値「#N/A」は「0」にならないでしょうか?

     エクセル2000でVLOOKUP関数のことで教えてください。  利用日6桁、室名を2桁、時間帯を1桁、計9桁の検索値を持った施設利用状況一覧表をつくります。そして、この表をもとに毎日の利用一覧表もつくれるファイルづくりを考えています。  さて、この施設利用状況一覧表には飛番号が多く、VLOOKUP関数で検索をかけた場合、飛番号分には「#N/A」が返ってくることがわかったのですが、これを「0」(数として認識して欲しい)にする方法がないでしょうか。宜しくご教示の程お願いします。

  • 【Access2013】 上書き保存と追加保存

    会社PCがWin10&Office2013へ交換されました。 Excelファイル(xlsx)で出力する際、保存場所とファイル名を自由に指定できるようにしたく添付画像のようなコードを作成しました。 しかし、同名ファイルがあっても「上書き保存しますか?」ダイアログが出ない上に、違うテーブルやクエリーをExcel出力すると1つのxlsxファイル内に別sheetで保存されます。 (例) Q_管理表というクエリーを管理表.xlsxという名前で出力    →続けてテーブル1というテーブルをExcel出力し管理表.xlsxに上書き保存すると管理表.xlsxの中に「Q_管理表」「テーブル1」という2つのsheetで保存される    →続けてQ_管理表を再度出力するとsheet「テーブル1」はそのままでsheet「Q_管理表」は上書きされる 1つのxlsxファイル内に別sheetで保存されるのはむしろ好都合なので、上書き保存と追加保存を選択できるようなコードはありませんか? できない場合は「上書き保存しますか?」ダイアログを出して上書き保存させたいです。

  • エクセルでの外部データの取り込み?参照??

    いつもお世話になっております。 エクセル2007での外部データでの取り込みについてお尋ねします。 (条件:例) Aファイル(東京都xlsx 埼玉県xlsx 神奈川県xlsx・・・・・と複数ファイル(A列に日付、B列以降に気温、降水量・・・)) Bファイル(データファイル(随時更新):地域ごとの気温の一覧表(A列に日付、B列以降に気温))     と二種類のエクセルファイルがあります。 現在はAファイルごとにVLOOKUP関数によって、VLOOKUP(日付、外部データ、MATCH("東京都"・・・)みたいな関数で読み込んでおり、気温のグラフなんかを作成しています。 ここで質問です。 今後Aファイルの数を増やしていく予定で、上記のような方法ではデータを移動させた時にリンクがおかしくなってしまうのではないか??って不安で・・・このような操作を行う場合の最良の方法を教えてください。 どうぞよろしくお願いいたします。