,エクセル2000のマクロでこんな事出来ますか?

このQ&Aのポイント
  • エクセル2000のマクロを使用して、指定の条件に基づいて表を変換することは可能ですか?
  • 質問文章では、Excel形式のデータが与えられ、特定の列に特定の条件で値を反映させる必要があると述べています。
  • 具体的には、M列に指定の値が入っている場合は、対応する列に特定の値を反映させることができるかということです。
回答を見る
  • ベストアンサー

,エクセル2000のマクロでこんな事出来ますか?

エクセル形式でデータが送られてきます。A~ADまで列があります。行数は決まっていませんが、だいたい10~50行程度です。 列は必ずA~ADと決まっています。1行目は項目が入り2行目からデータが入っています。そこでマクロを組んで下記のような事が出来るでしょうか? 先ず、必要なのはM、P、Q、T、Vの5列のみです。その他は必要ありません。データの内容としてP、Q列には日付が入力されています。V列はカタカナの文字が入っている又は空白の状態です。カタカナの文字は重複されている場合もあります。T列には数値が入っています。空白はありません、何らかの数値が入力されています。 M列には必ず文字が入っています。種類は決まっていて「東京、大阪、名古屋、福岡」の4種類しか入りません。 以上の内容なんですが、やりたいのは、先ず、A~ADをM、P、Q、T、Vのみの5列の表にした上でそこに3列を増やしたいのです。実際にはMPQTVがABCDEになるのでFGHという列が増える形になると思います。そのFGHという列には元T列に入っていた数値を反映させたいのです。 但し条件として ●M列に「東京」と入った場合には同じ行のT列の数値をF列に反映。M列に「東京」と入っている場合はV列に必ずカタカナが入力されています。 ●M列に「大阪」又は「名古屋」と入った場合には同じ行のT列の数値をG列に反映。但しこの「大阪」「名古屋」に関しては同行のV列にカタカナが入ってなくて空白の  場合があります。その場合は無視したいのです。V列が空白でM列が「大阪」「名古屋」の場合、まったく何も反映しない状態でその行はすべて削除で構いません。 ●M列に「福岡」と入った場合には同じ行のT列の数値をH列に反映。但しこの「福岡」と入る場合はV列が必ず空白の状態です。 以上がやりたい事ですが可能ですか?どなたか御教授下さい。

  • choroq
  • お礼率58% (335/575)

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

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

こんばんは。Wendy02です。 >ここまでの私のやり方はどこがおかしいのでしょう? 私は、それは教えていませんからね。ただ、これは、予想外です。(^^; 万が一、他の人が、そのマクロで、ワークシートをめちゃめちゃにしないか、ちょっと心配です。たぶん、M列のチェックで、誤動作することはないとは思いますが、それは、むやみに他のシートで使わないように、注意してください。 もしも、シートやブックに、特定する条件(ブックの名前とかシートの名前)があるなら、それで、マクロを実行してしまわないような設定をお付けします。 それで、ツール・ボタンについてですが、少し詳しく説明すると、「ニコチャン」マークの貼り付けて保存される場所は、Excel.xlb というファイルで、Excelの基本ファイルの一部です。そうすると、マクロのほうも、個々のブックではいけないわけで、呼び出されるマクロは、個人用マクロブック(PERSONAL.XLS)というファイルになくてはいけません。(アドインでもよいのですが、アドインは、少し、また面倒です) もし、個人用マクロブックがまだ作っていないようでしたら、ツール-マクロ-新しいマクロの記録で、 マクロの保存先(I) があると思いますが、 その保存先を、個人用マクロブックにして、 どこかのセルを1個2個クリックして、 ツール-マクロ-記録終了 で終わります。 それで、Alt + F11 で、Visual Basic Editor 画面を開けて、プロジェクト・エクスプローラ(通常は、左上)で、 VBAProject(PERSONAL.XLS) というのができているはずですから、それをダブルクリックして、出来上がったばかりのマクロを探してください。おそらく、Module1 の中にあるはずです。 たとえば、Sub Macro1() ~ End Sub になっているかと思います。 そこに、今回のマクロを上書きで貼り付けてしまいます。 後は、「ニコチャン」マークの登録先を、そちらのPERSONAL.XLS!ArrangementCr を選んで、登録しなおします。 なお、「ニコチャン」マークだけでなく、メニューの表示-ツールバー-ユーザー設定-コマンド-選択したボタンの編集(M)[ボタンを選択すると、ボタンがアクティブになります]で、いろいろと選ぶことも、また、デザインを施すこともできます。 (ただし、Excel.xlbのバックアップを取っておかないと、せっかく苦心して作った、専用ボタンを失うことになります。私は、2度失って、それからは、あまり凝ったものを作るのはやめてしまいました。) >「・・・・(ファイル名)」はマクロを含んでいます。マクロを有効にしますか?が出ます。 なお、通常は、この設定は不要です。マクロは、「中」「高」でも可能です。 ツール-マクロ-セキュリティ 信頼できる発行元[タブ] 組み込み済みのアドインとテンプレートをすべて信頼する(A) にチェックを入れてください。

choroq
質問者

お礼

Wendy02さん 大変有難うございました。 上手くいきました。 このPCは他の人間が使用する事は基本的には無いのですが 私自身が誤ってクリックする事も考えられるため、ボタンはやめて ツール、マクロから選ぶようにしました。 で、次のステップにといきたいところですが、前回教えて頂いた ところでちょっと追加がありましたのでまたそこを御教授して 頂ければとあつかましくも再度質問を立てると思います。 この質問に関してはこれで閉めますが、今回は今まで以上に いろいろと勉強になりました。 本当に有難うございました。感謝申し上げます。

その他の回答 (7)

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

こんばんは。Wendy02です。 遅くなりました。 >おっしゃるようにしたのですが1~3行目までがそのまま表示されてしまいます。 1~3行目をコピーしない、ということだと思いましたが、[非表示]にするということですね。 Sub ArrangementC() から '--------------------------- LastRow = Cells(START - 1, 13).End(xlDown).Row '13= M列 この行の上までを、上書きで貼り付けてしまってください。 '------------------------------------------------------ Sub ArrangementCr() 'QNo.2601172, v.1.3 Dim i As Integer Dim j As Long Dim LastRow As Long Const START As Integer = 4 'LastRow = Range("M65536").End(xlUp).Row '最下行取得 '4行目からのデータのみ表示 Rows("1:" & START - 1).Hidden = True '---------------------------------------------------- LastRow = Cells(START - 1, 13).End(xlDown).Row '13= M列 >実際に使用するのは初めてです。 そういえば、そうだったのですね。自分と同じペースのつもりで、考えてみませんでした。 >このマクロ自体をエクセルに登録する方法がいまいち理解出来ていません。 これについては、仮に、マクロの勉強を1年しても、「いまいち」は教わらないと分かりません。 Excel(Office の中でExcelだけ)は、基本的には、[標準モジュール]に登録する、ということです。なぜ、そうするかという理屈は長くなりますが、特別なことがない限りは、そこに入れてください。 [標準モジュールへの取り付け方] Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、コードを貼り付けて、Alt + Q で、画面を閉じます。 それで、もし、すぐに使うということですと、コントロールツールで、ボタンをドラッグして、右クリックで、[マクロの登録]でつけるのが一番よいです。メニューに組み込んだり、ツールアイコンにしたりする方法もありますが、必要でしたら、ひとまず、一通り、実行部分が終わってから書き出します。

choroq
質問者

お礼

Wendy02さん 有難うございました。 私の意図している事が出来ました。 で、登録に関してですが、 >Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor >画面が出てきます。 >次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、>画面が現れますので、コードを貼り付けて、Alt + Q で、画面を閉じます。 その後、ツール、ユーザー設定、コマンドタブのマクロを選択、で横のニコニコマークをツールバーへドラッグ、と行いました。 次に新規作成でエクセルを立ち上げて適当に文字を入れて、ニコニコマークをクリックすると 先程のマクロを掛けて保存したファイル名、保存場所が出て 「・・・・(ファイル名)」はマクロを含んでいます。マクロを有効にしますか?が出ます。 はいをクリックすると実行はされるのですが何故前のファイルの名前が表示されるのでしょうか? ここまでの私のやり方はどこがおかしいのでしょう?

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

こんばんは。Wendy02です。 こんな感じになりました。 もし、最初のデータ位置が変わるようでしたら、  Const START As Integer = 4 'タイトルは3行目 の数字を書き換えてください。 Sub ArrangementC() 'QNo.2601172, v.1.2 Dim i As Integer Dim j As Long Dim LastRow As Long Const START As Integer = 4 'タイトルは3行目 'LastRow = Range("M65536").End(xlUp).Row '最下行取得 '4行目からのデータのみ表示 LastRow = Cells(START - 1, 13).End(xlDown).Row '13= M列 If LastRow < START + 1 Or LastRow > 65535 Then MsgBox "シートが違うか、データがありません。", vbCritical: Exit Sub ''項目 必要になったら、外してください。 'Range("AE" & CStr(START - 1)).Resize(, 3).Value = Array("上", "中", "下") For i = 1 To 30  Select Case i     'M, P, Q, T, V   Case 13, 16, 17, 20, 22   Case Else: Columns(i).Hidden = True  End Select Next i Application.ScreenUpdating = False For j = START To LastRow   Select Case Cells(j, 13).Value    Case "東京", "大阪"   'M列に「東京」「大阪」と入った場合には同じ行のT列の数値をAE列に反映    If Cells(j, 22).Value <> "" Then      Cells(j, 31).Value = Cells(j, 20).Value    Else      Cells(j, 22).EntireRow.Delete      j = j - 1    End If   'M列に「名古屋」と入った場合には   Case "名古屋"     If Cells(j, 22).Value <> "" Then       'T列の数値をAF列に反映。       Cells(j, 32).Value = Cells(j, 20).Value     Else       Cells(j, 22).EntireRow.Delete       j = j - 1     End If   Case "福岡"     '「福岡」と入る場合は、AG列に反映     Cells(j, 33).Value = Cells(j, 20).Value     'V列が必ず空白の状態     Cells(j, 22).ClearContents   End Select Next j Application.ScreenUpdating = True End Sub >これはそのデータを別のファイルにコピーするマクロって意味ですか? >私の場合そのデータを別のファイルにコピペする事になるのですが >便利な方法もあるのでしょうか? それは、もう前から予想していました。 ただ、そのコピぺですが、もしかしたら、見えているまま、つまり、隠れている列は入れないで、コピーということではないでしょうか?シート名は、年と月を入れるとか? そんな風に想像しています。 わたし流の作り方は、ブックを開いていないときは、ブックを開き、ブックが開いている時は、そのまま、コピペという形にします。シートをどのように指定していくか、とか、どこに貼り付けるか、とか、ある程度情報をいただいて、今のものがOK出れば、次に移ります。

choroq
質問者

お礼

Wendy02さん 有難うございました。 おっしゃるようにしたのですが1~3行目までがそのまま表示されて しまいます。 どこか私のやり方がおかしいのでしょうか? それとコピペに行く前に 大変初歩的な質問ですが、今までマクロなるものを見た事があっても 実際に使用するのは初めてです。 で、今回も何とか見よう見まねでこのマクロを実行させるところまではわかるのですが、 このマクロ自体をエクセルに登録する方法がいまいち理解出来ていません。 エクセルを立ち上げるといつでもこのマクロが実行出来るように登録したいのですが どのようにすれば良いのでしょう? 今更ながらお手数をお掛け致します。

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

こんばんは。Wendy02です。 choroqさんとのQ&Aは、もう回を重ねていますので、ある程度の想像は付きます。 >今回の表に関しては下に付け加える事は特にないのですが >その場合でもこのマクロで宜しいのでしょうか? 可能です。ただ、その場合、M列には、空白セルが途中にあるとダメです。 だから、そんな場合は、実際は、こんな風にして、最下行を取っても可能なのです。 LastRow = Range("M30000").End(xlUp).Row ' 3万行より上のデータのある最終のデータ行という意味です。実際には、3万行もあるシートというのは、よほどのものですからね。 >AE,AF,AGには最上行の項目が空白です。 If LastRow < 2 Or LastRow > 65535 Then MsgBox "シートが違うか、データがありません。", vbCritical: Exit Sub '←7行目 上から7行目の次に、以下のコードを入れてください。 Range("AE1").Resize(, 3).Value = Array("上", "中", "下") そうすると、今度は、シート・コピーマクロかな? これは、今のマクロには続けないで、別に作ったほうがよいかもしれません。

choroq
質問者

お礼

Wendy02さん お礼が遅くなりました。 本日確認したところ問題ありませんでした。 ただ前回項目に空白があるとか言い出したものでわざわざ補足の 御回答を頂きましたが、ようは内容をコピペするだけなんだから データのみで良かったんです。 まったく余計なお手間を取らせてしまいました。 さらに前回の御教授を無視するようで恐縮ですが上から3行目までは 項目やタイトルが入っているのでまったく必要ありません。 4行目からのデータのみ表示させれば十分なんですが、合わせて教えて 頂ければ幸いです。 >そうすると、今度は、シート・コピーマクロかな? >これは、今のマクロには続けないで、別に作ったほうがよいかもしれません。 これはそのデータを別のファイルにコピーするマクロって意味ですか? 私の場合そのデータを別のファイルにコピペする事になるのですが 便利な方法もあるのでしょうか? 次から次へと質問攻めで申し訳ありません。

choroq
質問者

補足

Wendy02さん 有難うございました。遅くなり申し訳ありませんでした。 これでおそらく大丈夫だと思うのですが月曜日からデータが送られて きますので、しばらく様子を見てそれで何か問題があれば再度補足 させて頂きます。 もちろん問題が無ければきちんと御礼の方も書かせて頂きます。 勝手を言いますがお許し下さい。 若干お時間頂きますが必ず報告させて頂きますので今しばらく お待ち下さい。

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

こんにちは。Wendy02です。 >プロシージャの外では無効です たぶん、どこか、Sub ~ End Sub の外に、余計なものが書かれているのではないかと思います。もし、見つかるようでしたら、その部分を削除して試してみてください。 そうでなければ、一旦、前のものを全部消して、[標準モジュール]に、何も書かれていない空の状態して、ここのコードを貼り付けてみてください。 特に、その部分でエラーがあるとは思えません。 なお、こちらでも、Excel2000 でのチェックは済んでいます。

choroq
質問者

お礼

Wendy02さん。すみません。 書き込んでいる間にすでに回答して頂いたみたいで行き違いになってしまいました。 ↓の御礼の欄は無視して下さい。 Range("M1").End(xlDown).Rowを入れたら 上手くいきました。 きちんと読まずに早とちりして申し訳ありませんでした。 しかし今回の表に関しては下に付け加える事は特にないのですが その場合でもこのマクロで宜しいのでしょうか? 実際にこのデータは日々のデータですので完成後データをコピペして 別のファイルに一ヶ月分として集計していく形です。 それと、追加なんですが AE,AF,AGには最上行の項目が空白です。 それぞれ仮に「上、中、下」と入れたい場合はどうすればよいのでしょう? それも合わせてマクロで行うにはどうすれば良いのでしょう?

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

こんにちは。Wendy02です。 いつも、お仕事大変ですね。 以下を試してみてください。一応、条件は含まれているはずです。 厳密に言うと、以下のコードは、ロジックとしては、ちょっと問題があるところがあります。それは、最下行のとり方(最下行取得)が、確か、choroq さんの作られているシートの場合は、その下に加えることがあったように思います。その場合、M列に入れてあると、誤動作しかねません。その場合、 Range("M65536").End(xlUp).Row ではなく、 必ず、データが入っているという条件の下ですが、 Range("M1").End(xlDown).Row  のほうが良いかもしれません。 '標準モジュール '------------------------------------------- Sub ArrangementB() 'QNo.2601172, v.1.1 Dim i As Integer Dim j As Long Dim LastRow As Long LastRow = Range("M65536").End(xlUp).Row '最下行取得 'LastRow =Range("M1").End(xlDown).Row If LastRow < 2 Or LastRow > 65535 Then MsgBox "シートが違うか、データがありません。", vbCritical: Exit Sub For i = 1 To 30  Select Case i     'M, P, Q, T, V   Case 13, 16, 17, 20, 22   Case Else: Columns(i).Hidden = True  End Select Next i Application.ScreenUpdating = False For j = 2 To LastRow   Select Case Cells(j, 13).Value    Case "東京", "大阪"   'M列に「東京」「大阪」と入った場合には同じ行のT列の数値をAE列に反映    If Cells(j, 22).Value <> "" Then      Cells(j, 31).Value = Cells(j, 20).Value    Else      Cells(j, 22).EntireRow.Delete      j = j - 1    End If   'M列に「名古屋」と入った場合には   Case "名古屋"     If Cells(j, 22).Value <> "" Then       'T列の数値をAF列に反映。       Cells(j, 32).Value = Cells(j, 20).Value     Else       Cells(j, 22).EntireRow.Delete       j = j - 1     End If   Case "福岡"     '「福岡」と入る場合は、AG列に反映     Cells(j, 33).Value = Cells(j, 20).Value     'V列が必ず空白の状態     Cells(j, 22).ClearContents   End Select Next j Application.ScreenUpdating = True End Sub '-------------------------------------------

choroq
質問者

お礼

Wendy02さん 早々に有難うございます。 実行してみたのですがエラーが出ます。 「コンパイルエラー プロシージャの外では無効です」 と表示され LastRow = Range("M65536").End(xlUp).Row '最下行取得 の部分の xlUp のところが反転された状態です。 私のやり方がどこかおかしいのでしょうか・・・? それとも何か説明不足なのでしょうか? 宜しく御教授下さい。

choroq
質問者

補足

Wendy02さん。すみません。 ↓の御礼の欄は無視して下さい。 Range("M1").End(xlDown).Rowを入れたら 上手くいきました。 きちんと読まずに早とちりして申し訳ありませんでした。 しかし今回の表に関しては下に付け加える事は特にないのですが その場合でもこのマクロで宜しいのでしょうか? 実際にこのデータは日々のデータですので完成後データをコピペして 別のファイルに一ヶ月分として集計していく形です。 それと、追加なんですが AE,AF,AGには最上行の項目が空白です。 それぞれ仮に「上、中、下」と入れたい場合はどうすればよいのでしょう? それも合わせてマクロで行うにはどうすれば良いのでしょう?

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

こんばんは。Wendy02です。 一応、今回、今までのやってきた一連のものを一つのブックまとめて、choroq さん専用にしました。そうしないと、どうしてもはっきり分からない部分が出てきてしまいます。 >5列の表にした上でそこに3列を増やしたいのです。 >A~ADを ということは、物理的に、AE,AF,AG の三つの列を使うのはないでしょうか。 そういう方針で、これは作られています。 おそらく、その出された条件で、まだ抜けている部分があるのかもしれませんが、最初のものとして提示しておきます。 '標準モジュールに貼り付けてください。 '---------------------------------------------------- Sub ArrangementA() Dim i As Integer Dim j As Long Dim LastRow As Long LastRow = Range("M65536").End(xlUp).Row If LastRow < 2 Then MsgBox "シートが違うか、データがありません。", vbCritical: Exit Sub For i = 1 To 30  Select Case i     'M, P, Q, T, V   Case 13, 16, 17, 20, 22   Case Else: Columns(i).Hidden = True  End Select Next i Application.ScreenUpdating = False For j = 2 To LastRow   Select Case Cells(j, 13).Value    Case "東京"     Cells(j, 31).Value = Cells(j, 20).Value   'M列に「大阪」又は「名古屋」と入った場合には   Case "大阪", "名古屋"     If Cells(j, 22).Value <> "" Then       'T列の数値をG列に反映。       Cells(j, 32).Value = Cells(j, 20).Value     Else       Cells(j, 22).EntireRow.Delete       j = j - 1     End If   Case "福岡"     Cells(j, 33).Value = Cells(j, 20).Value   End Select Next j Application.ScreenUpdating = True End Sub '----------------------------------------------------

choroq
質問者

お礼

Wendy02さん いつも本当に有難うございます。 またお世話になります。 >ということは、物理的に、AE,AF,AG の三つの列を使うのはないでしょうか。 >そういう方針で、これは作られています。 その通りです。私の勘違いでした。 申し訳ありません。 で、よくよく確認したところ、私の説明に誤りを発見しましたので訂正してお詫び致します。 いつもの事ながらすみません。 ●M列に「東京」「大阪」と入った場合には同じ行のT列の数値をAE列に反映。但しV列が空白の場合もあります。 で、そのV列が空白の場合はその行ごと削除して全く表示も反映もさせないようにしたいです。 ●M列に「名古屋」と入った場合は同じ行のT列の数値をAF列に反映。 但しこの場合もV列が空白の場合もあります。その場合は上と同じようにはその行ごと削除して全く表示も反映もさせないようにしたいです。 ●M列に「福岡」と入った場合には同じ行のT列の数値をAG列に反映。但しこの「福岡」と入る場合はV列が必ず空白の状態です。 以上ですが何か不明な点があれば御指示下さい。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マクロで可能です。 どの部分が分からないのか教えていただければ、回答できると思います。

choroq
質問者

お礼

早々に有難うございます。 恥ずかしながらすべてです。 何卒宜しくご教授下さい。

関連するQ&A

  • エクセル2000のマクロで質問です。

    http://oshiete1.goo.ne.jp/qa2601172.html 前回上記の質問をさせて頂いて締め切りましたが一部変更になった為 再度質問させて頂きます。 ●M列に「大阪」又は「名古屋」と入った場合には同じ行のT列の数値をG列に反映。 但しこの「大阪」「名古屋」に関しては同行のV列にカタカナが入ってなくて空白の場合があります。 その場合は無視したいのです。V列が空白でM列が「大阪」「名古屋」の場合、 まったく何も反映しない状態でその行はすべて削除で構いません。 ↑とありますが、そうではなくて P列、Q列の日付(Pに月、Qに日)が空白でM列に「大阪」又は「名古屋」と入った 場合にはその行はまったく反映させないようにしたいのです。 ちなみにM列に「大阪」「名古屋」とはいった場合でもP、Qの日付は空白の場合も そうでない場合もあります。 M列に「福岡」と入った場合にはV列はもちろんP列、Q列は必ず空白です。 一番目と二番目の●は変わりありません。 他、補足が必要なら申し付け下さい。

  • エクセル2000で質問です。

    例のようにシート1のE列に数値が入力されるとシート2へ反映、F列に数値が 入力されるとシート3に反映されるようにしたいのです。 しかもシート1のB列に「*」が入るとその行はまったく反映させないという 条件を付け加えたいのです。 さらに欲を言えば「*」印はまれに入れたり消したりという操作が発生する 場合があります。後で消した場合もシート1の順序に基づいてシート2、3に 反映され最下位の行に反映させたくありません。 あるいは当初「*」が入っていなかったにも関わらず後で「*」が入った場合は シート2、3に空白行を作るのでは無く上から詰めた状態で表示させたいのです。 出来ればマクロではなく式で対応したいです。 補足が必要なら申し付け下さい。 (シート1)     B      D      E      F 6         東京     600 7         大阪             700 8         福岡     800 9   *     宮崎             300 10        横浜     900 11        横浜     400      12        新潟             500 13  *     東京     550 14        秋田             750 (シート2)        B       D       4     600     東京 5     800     福岡 6     900     横浜 7     400     横浜 (シート3)        B       D       4     700     大阪 5     500     新潟 6     750     秋田

  • エクセル2000で教えて下さい。

    以前によく似た質問をしましたが、一部変更になった為再度質問させて頂きます。 シート1のE列に数値が入るとシート2に反映、F列に数値が入るとシート3に反映させたいのです。 条件としてタイ、香港、韓国、中国が入った場合は無視して反映させない、 東京、横浜、大阪のようにシート1のD列に同じ文字が重複した場合は 両方とも反映させる。 シート1の同じ行上でE列、F列に数値が重複する事はありません。 他、補足が必要なら申し付け下さい。 (シート1)        D      E      F 6     東京     600 7     大阪             700 8     福岡     800 9     宮崎             300 10    横浜     900 11    タイ     100       12    横浜     400      13    香港             650 14    新潟             500 15    東京     550 16    秋田             750 17    大阪             150 18    韓国     440 19    中国             850 (シート2)        B       D       4     600     東京 5     800     福岡 6     900     横浜 7     400     横浜 8     550     東京 (シート3)        B       D       4     700     大阪 5     300     宮崎 6     500     新潟 7     750     秋田 8     150     大阪

  • エクセル このマクロはどこが間違っているのでしょうか。

    いつもお世話になります。 エクセルで、別ファイルにある表の、同じ商品コードのデータをつなげようしています。 <開いている表;タイトルを除くと12行目から開始> 列V  ~  列AC 商品コード テキストデータ <別ファイルの表;タイトルを除くと20行目から開始> 列B  ~  列T 商品コード (空白)←このセルに、列ACのデータを入れたい 下記のマクロを作成し、実行してみたのですが、結果は、sh1のセル"T20"(=最初の行)にのみ値が入り、後は空白のままでした。 お手数をおかけしますが、修正箇所と、何が原因で、2行目以降に働かないのかを教えていただけますでしょうか。 Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Workbooks("Book1.xls").Worksheets("sheet1") Set sh2 = Workbooks(ThisWorkbook.Name).Worksheets("sheet2") l = 20 For m = 12 To 2012 Step 1 If sh2.Cells(m, "V") = sh1.Cells(l, "B") Then sh1.Cells(l, "T") = sh2.Cells(m, "AC") l = l + 1 End If Next m

  • エクセル関数について

    エクセルの関数を教えてください。 例:25..15. 9.- 1.- 3. このように徐々に減って行く数値の並び(行・列)を別の行・列で 最初にマイナス(ー)になったセルのみ何かしらの数値を反映させるほ方法ってありますか? 何かしらの数値を1として、上記の例で説明すると 答:空白.空白.空白.1.空白 になります。(最初のマイナス、ー3を空白にするのがポイントです)

  • エクセル2013 マクロ ご教示ください

    1行目は見出しです。 Sheet1のV列にSheet2のF列を反映させたいです。 条件は Sheet1のD列とN列とF列を検索値として Sheet2のB列とG列とE列とが合致したら Sheet1のV列にSheet2のF列を反映させたいです。 また、Sheet1のV列に反映させた後 Sheet2の該当行は削除したいです。 もしもSheet2に該当値が無かったらSheet1のV列には ナシ の文字が入力されるようにお願いします。 Sheet1もSheet2も日々、最終行が違います。

  • エクセル マクロ 文字列の検索と抽出

    エクセル2010を使っています。 画像の様に、【Sheet3】のA列~CQ列に 空白・エラー・数値・文字 の入った表があります。 そのL列には、画像の様な形で様々な地域の名前が入っています。 やりたいのは、L列に 検索対象文字が複数、例えば 福岡 か 大阪 が入っていたら、その表ごと抽出し、【Sheet1】の上から順に枠線ごと貼り付けて行きたいと思います。 この時、両方一致ではなく、検索対象の文字列が一つでも含まれていたら抜き出したいと思います。 その時に 【Sheet3】から抽出した部分は削除し、上に詰めて行きたいと思います。 ちなみに検索対象が、福岡・大阪・名古屋等、増える場合もありますので、増えたとき対応が出来る形が理想です。 ちなみにL列の文字と文字の間は ・ だったり / だったりします。 詳しい方、よろしくお願い致します。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • エクセルに関して

    エクセルに関して質問させていただきます。 どなたかわかる方がいらっしゃいましたら、どうか力をお貸しください。 説明に至らない点があるかもしれません。そのときはご指摘頂けるとありがたいです。 表 列 B N T 行1 1 W 4 行2 2 W 3 行3 1 L 5 行4 1 L (空白) 行5 3 L 1 行6 3 L 1 行7 1 W 1 行8 1 W 1 行9 2 W 1 行10 1 L 1 (1)列Bの数値(ここでは1,2,3、ちなみにこの数値は4,5・・・とどんどん増えていっても対応させたい、できればアルファベットにも対応して欲しい)をあるセルに入力すると、数値を入力した下のセルに、列Tの数値かつ列NのWから列Tの数値かつ列NのLを引いた値を出したい。空白の場合は1とする。 例 あるセルに1と入力した場合。 1 1 W 4 3 1 L 5 4 1 L (空白) 7 1 W 1 8 1 W 1 10 1 L 1 となるので、結果は-1となる。 (2)さらに結果を表示させたセルの下のセルに Wの数を表示させたい。ここでは3となる (3)さらにWの数を表示させたセルの下のセルに Lの数を表示させたい。ここでは3となる (4)さらにLを表示させたセルの下のセルに WとLを足した数を表示させたい。ここでは6となる (5)さらにWとLを足した数を表示させたセルの下のセルに W÷(W+L)の数を表示させたい。ここでは0.5となる

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

専門家に質問してみよう