• ベストアンサー

Excelマクロで教えて下さい。

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 私もちょっと考えてみましたが、位置関係が狂うと、まったくダメになってしまうような、微妙な感じのマクロです。一回、作ったら、もう修正の利かない種類です。 '--------------------------------------- '標準モジュール '--------------------------------------- Sub TestMarco1()   Dim sh1 As Worksheet   Dim sh2 As Worksheet   Dim i As Long, j As Long, k As Integer   Dim x As Integer, y As Integer, z As Integer   Dim n As Long, m As Long   Dim buf As Variant   Dim clm As Integer   Dim rw As Long   Dim dTypes As Variant   Dim dTitles As Variant   Dim Cntnt() As Variant   Dim SpNames() As Variant   Set sh1 = Worksheets("Sheet1")   Set sh2 = Worksheets("Sheet2")   '有: 有休 公: 公休 出: 出勤 (本来は空欄です)   '順番を変えるのはここでします。      dTitles = Split("有休,公休,出勤,早出,遅出", ",")   dTypes = Split("有,公,出,早,遅", ",")      rw = sh1.Range("A65536").End(xlUp).Row '下限   clm = sh1.Range("IV1").End(xlToLeft).Column '右端      ReDim SpNames(UBound(dTypes))      sh2.Cells.Clear   '日付のコピー   x = 1 'グループごとのすき間   For y = 0 To 1 'UBound(dTitles) ''本来は全部出す     sh2.Range("A1").Offset(clm * y + x - 1).Value = dTitles(y)     sh1.Range("B1").Resize(, clm).Copy     sh2.Range("A1").Offset(clm * y + x).PasteSpecial , , , True   Next y   Application.CutCopyMode = False   Application.ScreenUpdating = False   For n = 2 To clm '列     For m = 2 To rw '行       With sh1         If .Cells(m, n).Value = "" Then           '出勤           k = 3 '検索値         Else           k = Application.Match(Trim(.Cells(m, n).Value), dTypes, 0)         End If         If Not IsError(k) And k <> 3 Then '出勤は出力しない           SpNames(k - 1) = SpNames(k - 1) & "," & .Cells(m, 1).Value         End If       End With     Next m          For z = 0 To UBound(SpNames())       buf = Split(Mid(SpNames(z), 2), ",")       If UBound(buf) > -1 Then         '(右端 - データ左端 + 間行)*Z + 先の行         sh2.Cells((clm - 1 + x) * z + n, 2).Resize(, UBound(buf) + 1).Value _         = buf       End If     Next z     Erase buf     ReDim SpNames(UBound(dTypes))   Next n   Application.ScreenUpdating = True   Set sh1 = Nothing: Set sh2 = Nothing End Sub

tana-aki
質問者

お礼

遅くなりましたありがとうございます。 今後マクロの組み方の参考にさせて頂きます。

関連するQ&A

  • Excelの関数・マクロについて教えて下さい。

    Excelの関数・マクロについて教えて下さい。 公休一覧表を作り、加えたい機能があったので 前回質問させて頂き、解決することができました。 しかし公休一覧表ではなく乗務割表に変更して欲しい との指示を受けたため作りなおしました。 そのため教えていただいた関数ではできなくなってしまい また質問を立てさせて頂きました。 現在のファイルはD3~AH3までが1~31までの日付、 B5~B35までが従業員名、D5~AH35内の全てのセルに 出勤の「出」の字を打ち、休んだ都度「出」を消していき、 シートの右には「出」の数、公休(空白セル)の数を表示する というシステムになっています。 そこで教えて頂きたい加えたい機能なのですが、 一番最後に出勤した日(最初から全てのセルに「出」を 入力しているので一番右の出ではなく、空白セルの 左右どちらかの「出」が最後の出勤日になります)から 1週間後のセル(D5~AH35内)に 自動で印(塗りつぶしなど)を付けるという機能です。 14日が最後の出勤日であれば21日に印がつき、 15日が最後の出勤日になれば前日の印が消え 22日に印を付けたいのですが可能でしょうか? 前回はD5~AH35内の空白セルに休む都度公休の 「公」の字を打つという物だったので単純に 一番右の「公」から7列右に印を付けていけば良かったのですが、 今回は最初からD5~AH35内の全てのセルに「出」を 入力しているので同じようにはできません。 前回教えて頂いた関数↓  =AND(COLUMN(A1)-7=MATCH("ー",$D5:D5),OFFSET(D5,0,-7)="公") 関数やマクロその他も含め、何か手があれば御教授願います。 小さくて見えにくいかと思いますが添付画像は14日まで入力した分です。

  • エクセルで勤務表をつくりたいのですが、いい方法がわかりません

           A B C D E F G~  名前/日付 1 2 3 4 5 6 7 ~31    合計 1XXX X子 日 ○ ◎ 有 公 欠 ~ 2 日勤     1                 17 3 夜勤      1                2 4 有休         1             2 5 公休          1            8 6 欠勤             1         1 上の表のような勤務表をエクセルで作成しています。行2から6はグループ化して隠せるようしています。 IF関数を使って該当の行に”1”をたてると行1に値を返すようにしました。 2~6以外にもいろいろなパターンがあるのですが、IF関数は7つまでしか無理なので今は手入力しています。また、合計を他のシートに飛ばして管理しています。 コード化してVLOOKUP関数で値を返す方法も考えたのですが、合計を出すのに上の表だとわかりやすいのでなにかいい方法はないか困っています。エクセルはあまり詳しくないのでどなたか教えていただけないでしょうか? (ちなみに、夜勤の入りは”○”出は”◎” 有/休・休/有・日/有・早出-日°・遅出-日.などなど)

  • エクセルの抽出?のマクロ作成について

    こんばんは、じつはエクセルでどうしても整理したい事項がありましてどうやらマクロでやらないとすごい時間かかりそうなもので、是非ともお教えいただきたいのですが(VBAはほとんど初心者です^^;;) 例えば ガンダムのおもちゃが置いてある店のリストのシートと ルパンのおもちゃが置いてある店のリストのシートと ドラクエのおもちゃが置いてある店のリストのシートの3つのシートを手に入れている場合に ガンダムは a,b,c,dの4店にあり ルパンは b,c,d,e の4店にあり ドラクエは d,eの2店にあるようなばあいに a店 ガンダム b ガンダム ルパン c ガンダム ルパン d ガンダム ルパン ドラクエ e ルパン ドラクエ というようにわかりやすくどのおもちゃはどこに何種類おいているかの表をつくりたいのですが、どのようにマクロを作成したらよいのでしょうか?? 是非お教えいただけると幸いです。よろしくお願いします。

  • エクセルのマクロについて

    一つのセルに以下のマクロを設定したいです。 [Aシート] A1~B30の表があります。 A1~A30セルには、有 or 無 が入力されています。 B1~B30セルには、りんご、みかん、ばなな など物の名前(重複なし)が入力されています。 [Bシート] C3セルに、AシートのAセルが"有"だったら、Bセルの値を反映させたいです。 ※例えばAシートが以下の時 ----------------------   A  B 1 有  りんご 2 有  みかん  3 無  ばなな 4 無  いちご 5 有  ぶどう 6 無  ぱいん 7 有  びわ ・ ・ ------------------------ BシートのC3セルに、AシートBセルの値を"折り返して"表示する。   A  B  C 1 2 3      りんご        みかん        ぶどう        びわ 4 ------------------------ OS:Windows XP sp3 エクセル:Microsoft Office Excel 2003 sp3 ご存知の方がおりましたらご教授ください。

  • エクセルでマクロを書きたい 

      A   B  C  D  E  ・・・ 1     1  2  3  ・・・ 31 2 氏名  月  火  水  木 ・・・ 3 田中  1     1 4 中村     1 5 鈴木     1 6 ・ ・ ・ 上記のように1ヶ月ごとの顧客の来店予定日に1が入力されています。このデータを元に、日にちごとの来客予定リストを作成したいです。 来客予定リストは1週間毎にカレンダーのような形で表にしますので、抽出したリストを該当する日にちの列に書き込むのが理想ですが、まずは、日にちごとの利用者を別のシートに書き出すマクロを教えていただけると助かります。

  • Excelのマクロについて教えて下さい。

    公休一覧表を作ったのですが加えたい機能があります。 2の行に1~31日の日付があり、 Bの列に30人の作業員名が入力されています。 休んだ日の所に都度、公休の公という文字を打っていき その月に何回休んでるかを シート右のAIの列に表示しています。 加えたい機能というのは、 B1の作業員の6日に公を入力したら 一週間後の13日に自動で×(印になるようなもの) を入力させたいです。 B1の作業員の7日に公を入力すると 13日の印が消え、7日の一週間後の14日に印が付く。 というような形で30人分自動で一週間後に印を付けたいです。 VBAなどマクロなど関数なども含め、何か手があれば初心者にもわかるよう 詳しく教えていただけると助かります。よろしくお願いします。

  • excelのマクロ選択用マクロ

    お世話になります。 excelで分からない事があるので答えていただけたら幸いです。 質問の内容ですが、 同じシート内に、A,B,C,D,Eのマクロがあります。 これらのマクロを,プルダウンから選んで実行する為のマクロを作りたいのですが、可能でしょうか? よろしくお願い致します。

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • 複数エクセルシートの組合せるマクロの質問で(2)

    ややこしくて済みません。質問の真意は以下の通りです。 <シート1>にはABCD....の2桁からの組合せ、<シート2,3,4....>には0と1の2桁、3桁、4桁....の組合せになります。そして<macro>シートには<シート1>の各桁の組合せと0,1を組合せた結果のまとめになります。以下は例文です。 <sheet>1 A B A C : : A B C A B D : : : A B C D A B C E : : : : <shee2> 1 1 1 0 : : <sheet3> 1 1 1 1 0 1 : : : <sheet4> 1 1 1 1 1 1 1 0 : : : : <macro> A B 1 1 A B 1 0 : : A B C 1 1 1 A B C 1 0 1 A B D 1 1 1 A B D 1 0 1 : : : A B C D 1 1 1 1 A B C D 1 1 1 0 A B C E 1 1 1 1 A B C E 1 1 1 0 : : : : 以上、マクロの組み方あるいは関数などで解決できる方法を教えていただきたいです。

  • エクセルマクロ 日付を検索し入力

    エクセル2003マクロを使用して以下の事を行いたいと思っていますが、どのようなマクロを組んだらよいか分かりません。よろしくお願いします。 シート上部にある以下のデータを    A      B     C      D      E     1  日付 商品A 商品B 商品C  商品D 2  5/26    5     6     1       3    ←その日のデータ(毎日変わる) 入力ボタンを作成し、それを押すことにより        ↓ 6   5/1 7    ・ 8    ・ 9   5/26   5     6     1     3 10    ・  ↑日付が予め入力された表 上記のような、同一シート上の日付欄に入力される表を作りたいのですが、方法が分かりません。 その日のデータは、別シートに入力用フォームを作成し、飛ばしています。何人かの人間が入力するので、マクロで簡単に、行えるようにしたいと思います。よろしくお願いします。