10年前と現在の生徒の成績を比較する作業をしています。
作業内容は、
シート1(10年前)
学年 国語 数学 理科 社会 英語 音楽
1-1-1 90 85 65 78 89 合格
1-1-2 65 54 43 43 92  不可
  ・
  ・
  ・
3-10-40

シート2(現在)
学年 国語 数学 理科 社会 英語 音楽
1-2-3 94 65 75 78 89 合格
2-1-4 75 64 43 43 92  不可
  ・
  ・
  ・
3-8-42

上記のようなデータがそれぞれsheet1,2に入っています。
私がやろうとしているのは、
1.シート1の学年をシート2に参照させて一致すればシート1と2の各項目を比較させる。
2.シート1とシート2の各項目の点数が同じなら次の項目を比較し、違った時点でシート2の該当項目セルの色を変える。
3.シート1の学年がシート2にない場合はシート3にピックアップする。
ことを試みています。
学年の並びは変えたくないのでこのままで比較を行っていきます。

プログラムを作ってみたのですが、うまくいきません。
どなたかヒントだけでも構いませんのでご教授ください。
本当ならここに私が作成したプログラムを記載するべきなのですが、データを学校に置いてきてしまったため記載できません。申し訳ありませんがよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>本当ならここに私が作成したプログラムを記載するべきなのですが、



それは違うと思います。
学校の資源は学校内で片付けるのが筋でしょう。
内容によっては「公開してはいけない文書」「社外秘」扱いではないですか?。
ここの掲示板でヒントを得てから、
学校の本体システムに導入してください。

「別シートを参照させること」
「別シート同士で値を比較すること」
「色をつけること」
「シート1とシート2のマッチング、抽出」
機能ありすぎてそのまますべての実現プログラムを待つのは時間のロスです。

何ができて、何ができていないのか、
最終目的は何か、
エクセルでないと駄目なのか、他のアプリで照合して
結果エクセルにすることも考えてみる。
    • good
    • 0

丸投げで、コード作成依頼型質問ではないか。


ここは課題をそのまま投げて、無料でやってもらう仕組みではない。
また他人にすぐ頼り過ぎる。教師がそれでは良くないだろう。
ーー
道具立てとしては
(1)2シートのそれぞれのセルデータの表し方(VBAコードでシートの特定する表現)
(2)第2シート(A列)で同じ値のセルの見つけ方
(3)条件に該当すればセルの色(パターン色)を変える
(4)条件該当分を第3シートに書き出し
(2は検索の操作をして、(3)はパターン色を変える操作をして、マクロの記録でVBAコードを学んではどうか
該当を見つけるFindを除けば、IFステートメントの比較とシートから第3シートへの値の代入だけの問題。
初心者ならばFindもやめて、第2シートの全行総なめで探したら。余裕が出来たら改良すれば良い。
ーー
本質のことではないが、学年が1-2-3のように3つの部分になっている意味はなに?
>10年前と現在の生徒の成績を比較
10年も同一生徒が在学するのはなに?
 学年集団として比較するなら、個別論ではなく、統計的な考え・処理が要るのでは。
質問で実情を出したくなくて、別の事例ですり替えたのか。
    • good
    • 0

データサンプルだけでなく、処理後のサンプルも提示しましょう。



プログラムを作って、ヒントだけでも構わない、というのなら、そのプログラムを提示しましょう。
学校に置いてきたために提示できないということですが、この時間ならもう学校にいますよね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAで、アクティブなBOOKのファイル名を取得し

エクセルのVBAを使用して、選択されている、BOOKのファイル名を取得し、下記のように編集してA1セルに入れたいのですが、可能でしょうか?


BOOKのファイル名が「大阪_たこ焼き_1234.xls」の場合

大阪_と.xlsをは省いて、「たこ焼き_1234」がA1セルに入るようにしたい。

Aベストアンサー

拡張子なんでもござれ!
Sub TheBody()
Const xSeparator = "_"
Const xPeriod = "."
Dim KitCut As Variant
KitCut = Split(ActiveWorkbook.Name, xPeriod)
KitCut = Split(KitCut(0), xSeparator)
Range("A1").Value = KitCut(1) & xSeparator & KitCut(2)
Columns("A").AutoFit
End Sub

Qエクセルのマクロ【複数検索&検索結果の合計】

以下のように
【sheet1】にA列B列からなるデータにおいて
A列の内容が同じものどうしのB列の値を合計し
その結果の大きい順に並べて
【sheet2】に出力するマクロを
作りたいのですが、どうしたらよいかわかりません。
どなたかお分かりになる方いらっしゃいましたら
教えて頂きたくお願い致します。

【sheet1】  
A列    B列
aaa 5
bbb 4
aaa 3
aaa 2
ccc 89
bbb 100

【sheet2】
A列
bbb 104
ccc 89
aaa 10

Aベストアンサー

ピボットでできるけど。。。

VBA なら Dictionary を利用するとか? 以下は適当に書いたコード
なので参考までに。

Sub SampleProc()

  Dim dic  As Object ' Dictionary ' ※ Microsoft Scripting Runtime
  Dim r   As Range
  Dim sKey  As String
  Dim i   As Long
  Dim n   As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  ' // 集計
  For i = 1 To 50 ' 1-50 行まで
    sKey = Trim$(Cells(i, "A"))
    Set r = Cells(i, "B")
    If sKey <> "" And IsNumeric(r.Value) Then
      If Not dic.Exists(sKey) Then
        ' // 新しい項目ならキーを追加
        dic.Add Key:=sKey, Item:=r.Value
      Else
        ' // 既出項目ならキーの値と合計する
        ' // 少数がある場合は丸め誤差に注意
        dic(sKey) = CDbl(dic(sKey)) + r.Value
      End If
    End If
  Next i
  
  ' // 結果出力
  n = dic.Count
  If n > 0 Then
    ' // セルへ記入
    Range("D1").Resize(n).Value = Application.Transpose(dic.Keys)
    Range("E1").Resize(n).Value = Application.Transpose(dic.Items)
    ' // 並べ替え
    Range("D1:E1").Resize(n).Sort Key1:=Range("E1"), _
                   Order1:=xlDescending
  Else
    MsgBox "集計できません", vbInformation
  End If
  
  Set r = Nothing
  Set dic = Nothing

End Sub

ピボットでできるけど。。。

VBA なら Dictionary を利用するとか? 以下は適当に書いたコード
なので参考までに。

Sub SampleProc()

  Dim dic  As Object ' Dictionary ' ※ Microsoft Scripting Runtime
  Dim r   As Range
  Dim sKey  As String
  Dim i   As Long
  Dim n   As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  ' // 集計
  For i = 1 To 50 ' 1-50 行まで
    sKey = Trim$(Cells(i, "A"))
    Set r = Cells...続きを読む

QExcelVBA:自己のBook名を取得したい

WindowsXP-Proです。
Excelヴァージョンは2003です。

ExcelVBAでコーディングしています。
で、自分自身(つまり、このVBAコードを記述しているExcel本体)のBook名を取得したいのですが、何か関数は用意されていますでしょうか?

自分自身のBook名を取得したい理由は、VBAコードを記述しているExcel本体のファイル名(Book名)の名前が変更されても、VBAが正常に機能するように、今現在のBook名を取得したいのです。

複数のExcelファイルを、このVBAで操作しているため、
Workbooks("本体のBook名").Activate
を用いており、仮にファイル名(本体のBook名)の名前が変更されても、VBAが正常に機能できるように、"本体のBook名"部分を固定ではなく、可変で持てるようにしたいからです。

Aベストアンサー

Public Sub Auto_Open()
  MsgBox ActiveWorkbook.Name
  MsgBox ThisWorkbook.Name
End Sub

Private Sub Workbook_Open()
  MsgBox Me.Name
End Sub

いずれも、ブック名が表示されました。

Qマクロでシート名を配列に格納して比較したい

はじめまして。
 異なるファイル間でそれぞれシート名を比較して、ないものがあればそのシートを元ファイルに追加したいのです。新ファイル(任意の位置に増加シートがあります)→元ファイル(新ファイルの増加シートを新ファイルと同じ並び順で追加される)
元ファイルはすでに記入してあるものなので、単純に上書きではまずいので、上記の様な方法を採りたいのですが、大きく3点でつまずいてます。
1.シート名を配列に格納 
2.配列の比較(存在の有無)
3.同じ位置に追加
と肝心なところがダメなわけでありますがなんとか助けて頂けないでしょうか?
1.2.はたぶんこの方法かなと思ってるだけですが。(For nextの2重ループでは挫折しましたので)

 仕様はマクロ記入ファイル(FARSTBOOKとしています)からコピー先ファイル(OLDBOOKとしています)とコピー元ファイル(NEWDBOOKとしています)を開き、それぞれを配列に格納して最初の流れで進めたいのです。指定したファイルを検索させて開くことや、シートの追加等はいつもやっているのですが、今回は複数と複数の比較で困っております。どなたか力を貸してください。

はじめまして。
 異なるファイル間でそれぞれシート名を比較して、ないものがあればそのシートを元ファイルに追加したいのです。新ファイル(任意の位置に増加シートがあります)→元ファイル(新ファイルの増加シートを新ファイルと同じ並び順で追加される)
元ファイルはすでに記入してあるものなので、単純に上書きではまずいので、上記の様な方法を採りたいのですが、大きく3点でつまずいてます。
1.シート名を配列に格納 
2.配列の比較(存在の有無)
3.同じ位置に追加
と肝心なところがダメなわけで...続きを読む

Aベストアンサー

#1 です。連投すみません。

修正したものを再度掲載しておきます。

Sub Sample()

  Dim wbSrc    As Workbook
  Dim wbDst    As Workbook
  Dim shSrc    As Object
  Dim shDst    As Object
  
  Set wbSrc = Workbooks("NEWBOOK.xls") ' // コピー元
  Set wbDst = Workbooks("OLDBOOK.xls") ' // コピー先
  
  ' // まず NEWBOOK.xls にあって OLDBOOK.xls にないシートを複写
  For Each shSrc In wbSrc.Sheets
    On Error Resume Next
    Set shDst = wbDst.Sheets(shSrc.Name)
    On Error GoTo 0
    If shDst Is Nothing Then
      shSrc.Copy After:=wbDst.Sheets(wbDst.Sheets.Count)
    End If
    Set shDst = Nothing ' <---- 追加
  Next

  ' // シート並べ替え
  For Each shDst In wbDst.Sheets
    shDst.Move Before:=wbDst.Sheets(wbSrc.Sheets(shDst.Name).Index)
  Next

End Sub

#1 です。連投すみません。

修正したものを再度掲載しておきます。

Sub Sample()

  Dim wbSrc    As Workbook
  Dim wbDst    As Workbook
  Dim shSrc    As Object
  Dim shDst    As Object
  
  Set wbSrc = Workbooks("NEWBOOK.xls") ' // コピー元
  Set wbDst = Workbooks("OLDBOOK.xls") ' // コピー先
  
  ' // まず NEWBOOK.xls にあって OLDBOOK.xls にないシートを複写
  For Each shSrc In wbSrc.Sheets
    On Error Resume Next
 ...続きを読む

Q他のワークシート名の取得方法 (VBAを使用せずに)

VBAを用いずに、ワークシート関数のみでワークシート名を取得できないか探しています。

自分のシート名は、以下の出力結果の一部より取得することができました。
=CELL("filename")

しかし、他のシート名を取得する方法が思いもつきません。

VBAを用いずにシート名を取得することはできないのでしょうか?

Aベストアンサー

Excel2000でしたら、
1.[挿入]-[名前]-[定義] から、名前を2つ定義します。
  ・名前:PPP  参照範囲:=GET.WORKBOOK(1)
  ・名前:QQQ  参照範囲:=GET.DOCUMENT(88)
2.A1 に =SUBSTITUTE(INDEX(PPP,ROW()),"["&QQQ&"]","") と入力します。
3.A1 を下方にドラッグコピーすると、シート名が一覧で表示されます。

例えば3枚目のシート名のみを取得する場合は、任意のセルに
=SUBSTITUTE(INDEX(PPP,3),"["&QQQ&"]","") と入力します。

※マクロ関数というものですが、最近のバージョンにこれが付帯されているのかどうか
  わかりませんが。   ^_^;

Qマクロについてどなたかご教授お願い致します。 全て同シートの作業です。 エクセルのセルコピーして値の

マクロについてどなたかご教授お願い致します。
全て同シートの作業です。
エクセルのセルコピーして値のみ貼り付けをするのですが、毎日貼り付けるセルが違うように設定したいのです。
C2が1日 D2が2日と毎日今日の日付に貼り付けたいです。マクロ記録ぐらいしか出来ない素人でございます。コピーする場所は毎回同じです。

Aベストアンサー

No3です。
すみません。セルのコピー&ペーストですね。
セルの値だけでなく、書式も含めてコピーされたいのなら、以下のようにしてください。
Option Explicit
Sub Macro1()
Dim colNo As Long
colNo = day(Date)
Range("A1").Copy
Cells(2, colNo).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End Sub
コピー元はA1セルにしています。これは、あなたの環境に合わせてください。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセルでの表検索&比較です。

図1のような表があります。

やりたいことは次の(1)~(3)です。

(1) 黄色の部分に適当な数字を入力します。(今仮に25000とします。この部分は変数です。)
(2) 図1の表の中から最も近い値を緑の部分に表示するとともに、その数字のセルを赤でマークします。(行6-列7の25100になります)
(3) (1)と(2)の差をピンクの部分に表示します。(絶対値で)(100になります)

これを自動でやりたいのですがどうしてもできません。

関数や、テーブル検索のプログラムでもかまいませんので、ご存知の方どうかお知恵をお貸しください。

これができると、大変助かります。

よろしくお願いいたします。

Aベストアンサー

質問内容だと24900(E11セル)も差は100ですが
検索値以下の近似値は必要ないのか?
(必要ない場合:検索値以上の差分が200で、検索値以下の差分が100の場合は?)

QVBAでアカウント名を取得する方法

VBAで処理したEXCELブックをデスクトップに自動保存しようとしています。VBAで現在作業中のユーザーアカウント名を自動で取得する方法を教えていただきたいのですが。

デスクトップ上にブックを保存するには、パスを記述すればよいのですが、現在PC毎にユーザーアカウントを設定しユーザー名が異なっています。
このため、PC毎にこのユーザー名をデスクトップへのパスに入れ込まなければなりません。毎回キーボードからこのユーザー名を入力する方法もありますが、自動的にユーザー名を取得し、正しいパスを指定する方法を検討しています。
どなたか、VBAでこのユーザー名を取得する方法が有れば教えていただきたいのですが。
よろしくお願いいたします。

Aベストアンサー

Environ関数で、環境変数[USERNAME]を取得する。

MsgBox Environ("USERNAME")

Qマクロで非表示シート内にあるデータの検索方法が知りたい

マクロの勉強をしているのですが、練習で郵便番号検索ツールを作成したいと思っています。

概要
 まず、郵便番号7桁を入力する。変換ボタンを押すと、住所を検索し、漢字で住所を表示し、読み仮名をひらがなで表示する。

とまぁ、こんな感じのものを作りたいと考えています。
で、取りあえず郵便番号と住所(読み仮名つき)一覧表を作りました。

一覧表は・・
A1には郵便番号、A2には都道府県名、A3には市区町村名、A4には町名、A5には市区町村名(ふりがな)、A6には町名(ふりがな)
となっています。


さて、ここからが問題なのですが・・・
ユーザーフォームを使ってこれを使えるようにしたいのですが、検索方法がわかりません。

イメージとして、テキストボックスに入力してもらい、変換ボタンを押すと、エクセルシートの中から該当する郵便番号を検索し、その隣にある内容を変数に代入し、持ってこようと思っていました。

でも、ここで問題が・・・
検索してるところが見えるとかっこ悪い 笑
というわけで・・もうちょっと何とかしたいんですけど、シートを非表示にしちゃうと、マクロの記憶で得た検索方法はエラーになっちゃうんですよね。。

そんなわけで、これをどうにかできないか考えています。非表示シートの検索方法があれば一番いいのですが、もしない場合は代替案を教えていただけるとありがたいです。
よろしくお願い致しますm(_ _)m

マクロの勉強をしているのですが、練習で郵便番号検索ツールを作成したいと思っています。

概要
 まず、郵便番号7桁を入力する。変換ボタンを押すと、住所を検索し、漢字で住所を表示し、読み仮名をひらがなで表示する。

とまぁ、こんな感じのものを作りたいと考えています。
で、取りあえず郵便番号と住所(読み仮名つき)一覧表を作りました。

一覧表は・・
A1には郵便番号、A2には都道府県名、A3には市区町村名、A4には町名、A5には市区町村名(ふりがな)、A6には町名(ふりがな)
となっていま...続きを読む

Aベストアンサー

こんにちは。

検索の前に一覧表の作り方ですが、行と列を逆にした方がいいです。

データ数がどのくらいか分かりませんが、項目が行方向ということはデータは列方向と言うことですよね?列は256しかないのですぐ足りなくなるのでは?と思います。

検索方法ですが、一般機能で言うと 編集→検索 をマクロで行っているのでしょうか?

だとすれば見つけたセルがアクティブになるので「マクロの記録」で得たコードでは検索部分のコードの最後にActivateと付いていると思います。

Activeにするのではなくて、Range型のオブジェクト変数に検索結果のセルを入れてっこの変に対して処理をするようにすればいいと思います。

こんな感じです。例えばSheet1でcを検索しその右隣の値を表示します。

Dim myrng As Range

Set myrng = Worksheets("Sheet1").Cells.Find(What:="c", _
After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext,MatchCase:=False, _
MatchByte:=False, SearchFormat:=False)

MsgBox myrng.Offset(0, 1).Value

どうでしょうか?

こんにちは。

検索の前に一覧表の作り方ですが、行と列を逆にした方がいいです。

データ数がどのくらいか分かりませんが、項目が行方向ということはデータは列方向と言うことですよね?列は256しかないのですぐ足りなくなるのでは?と思います。

検索方法ですが、一般機能で言うと 編集→検索 をマクロで行っているのでしょうか?

だとすれば見つけたセルがアクティブになるので「マクロの記録」で得たコードでは検索部分のコードの最後にActivateと付いていると思います。

Activeにするのではな...続きを読む


人気Q&Aランキング

おすすめ情報