V/B/A

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

import os

from PIL import Image,ImageGrab

import pyocr

import pyperclip as pc

import datetime

import streamlit as st

#インストールしたTesseract-OCRのパスを環境変数「PATH」へ追記する。

#OS自体に設定してあれば以下の2行は不要

#path='C:\\Program Files\\Tesseract-OCR'

#os.environ['PATH'] = os.environ['PATH'] + path

#pyocrへ利用するOCRエンジンをTesseractに指定する。

tools = pyocr.get_available_tools()

print(tools[0].get_name())

tool = tools[0]

#OCR対象の画像ファイルを読み込む

img = ImageGrab.grabclipboard()

#img = Image.open("test2.jpg")

#画像を読みやすいように加工。

#img=img.convert('RGB')

#size=img.size

#img2=Image.new('RGB',size)

#border=245

#for x in range(size[0]):

# for y in range(size[1]):

# r,g,b=img.getpixel((x,y))

# if r > border or g > border or b > border:

# r = 255

# g = 255

# b = 255

# img2.putpixel((x,y),(r,g,b))

if img is None:

print("そのようなデータは存在しません。")

text = "none"

else:

img.save(r"C:\Users\USER\OneDrive\ドキュメント\program\streamlit_app\jpg001.png")

#画像から文字を読み込む

builder = pyocr.builders.TextBuilder(tesseract_layout=6)

text = tool.image_to_string(img, lang="jpn", builder=builder)

print(text)

pc.copy(text)

#text_file = open(r"C:\Users\USER\OneDrive\ドキュメント\program\OCR\out.txt"out.txt", "a")

#text_file.write(text + "\n")

#text_file.close()

st.title('サプーアプリ')

st.caption('読み取りテストアプリ')

st.subheader(text)

st.text('pythonに関する情報\n'

'よろしく')

code = '''

import streamlit as st

st.title('サプーアプリ')

'''

st.code(code, language='python')

#画像

image = Image.open(r"C:\Users\USER\OneDrive\ドキュメント\program\streamlit_app\パイモン001.png")

st.image(image,width=200)

image = Image.open(r"C:\Users\USER\OneDrive\ドキュメント\program\streamlit_app\jpg001.png")

st.image(image,width=200)

with st.form(key='profile_form'):

#テキストボックス

name = st.text_input('名前',text)

address = st.text_input('住所')

#日付

start_date = st.date_input(

"When's your birthday",

datetime.date.today())

#ボタン

submit_btn = st.form_submit_button('送信')

cancel_btn = st.form_submit_button('キャンセル')

#print(f'submit_btn: {submit_btn}')

#print(f'cancel_btn: {cancel_btn}')

if submit_btn:

st.text(f'ようこそ!{name}さん!{address}に送ります')

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

import os

from PIL import Image,ImageGrab

import pyocr

import pyperclip as pc

#インストールしたTesseract-OCRのパスを環境変数「PATH」へ追記する。

#OS自体に設定してあれば以下の2行は不要

#path='C:\\Program Files\\Tesseract-OCR'

#os.environ['PATH'] = os.environ['PATH'] + path

#pyocrへ利用するOCRエンジンをTesseractに指定する。

tools = pyocr.get_available_tools()

print(tools[0].get_name())

tool = tools[0]

#OCR対象の画像ファイルを読み込む

img = ImageGrab.grabclipboard()

#img = Image.open("test2.jpg")

#画像を読みやすいように加工。

img=img.convert('RGB')

size=img.size

img2=Image.new('RGB',size)

border=245

for x in range(size[0]):

for y in range(size[1]):

r,g,b=img.getpixel((x,y))

if r > border or g > border or b > border:

r = 255

g = 255

b = 255

img2.putpixel((x,y),(r,g,b))

#画像から文字を読み込む

builder = pyocr.builders.TextBuilder(tesseract_layout=6)

text = tool.image_to_string(img2, lang="jpn", builder=builder)

print(text)

pc.copy(text)

text_file = open("out.txt", "a")

text_file.write(text + "\n")

text_file.close()

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Private Sub 製造仕様書番号_Plan_Click()

Dim strSpecNo As String

On Error GoTo Err_製造仕様書番号_Plan_Click

If IsNull(Me.仕様書番号) Then

MsgBox "Nullです。"

Else

strSpecNo = Me.仕様書番号

MsgBox "Null以外です。" & strSpecNo

Const BookFolder As String = "C:\Users\USER\OneDrive\ドキュメント\work\access\"

Dim key As String

Dim AC As String

Dim len1, len2 As Long

Dim hkey As String

Dim fkey As String

Dim fname As String

Dim count As Long

Dim fnames() As String

Dim filestr As String

Dim URLname As String

Dim ret As Long

Dim I As Long

'Dim cl As Range

'AC = ActiveCell.Address(False, False)

'Set cl = ActiveWindow.ActiveCell

If Left(strSpecNo, 1) = 3 Then '左から一文字目が3なら

key = Left(strSpecNo, 6) 'keyへ左から6文字で代入

Else

key = strSpecNo 'そうでないならそのまま代入

End If

'key = txts3

If key = "" Then

MsgBox "製品仕様書番号や原反等の仕様書番号の入力されたセル等を選択してから実行してください"

Exit Sub 'keyが空白なら終了

End If

len1 = Len(key)

len2 = LenB(StrConv(key, vbFromUnicode))

'全て半角の場合、コードが指定されたと判断する

If len1 = len2 And Left(key, 3) = "PCD" Then

hkey = "PCD"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PCT" Then

hkey = "PCT"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PEL" Then

hkey = "PEL"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PGR" Then

hkey = "PGR"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PNL" Then

hkey = "PNL"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PDL" Then

hkey = "PDL"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "PBC" Then

hkey = "PBC"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "YOU" Then

hkey = "YOU"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 3) = "HAI" Then

hkey = "HAI"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Left(key, 2) = "KH" Then

hkey = "KH"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Mid(key, 6, 1) = "T" Then

hkey = "TSO"

fkey = "*" & key & "*.pdf"

ElseIf len1 = len2 And Mid(key, 6, 1) = "G" Then

hkey = "GSO"

fkey = "*" & key & "*.pdf"

Else

'全角が含まれる場合、仕入先が指定されたと判断する

MsgBox "【" & AC & "選択】不明なデータ"

End If

On Error GoTo エラー処理

fname = Dir(BookFolder & hkey & "\" & fkey)

If fname = "" Then

'MsgBox ("該当ファイルなし")

Exit Sub

End If

count = 0

filestr = ""

'ファイル一覧取得

Do While fname <> ""

ReDim Preserve fnames(count)

fnames(count) = fname

count = count + 1

filestr = filestr & fname & vbCrLf

fname = Dir()

Loop

ret = MsgBox(filestr, vbOKCancel)

If ret <> vbOK Then Exit Sub

For I = 0 To UBound(fnames)

CreateObject("Shell.Application").shellExecute BookFolder & "\" & hkey & "\" & fnames(I)

'CreateObject("Shell.Application").shellExecuteで所定のアプリで開く

'ファイル一覧取得

' Do While fname <> ""

' ReDim Preserve fnames(count)

' fnames(count) = fname

' count = count + 1

' filestr = filestr & fname ' & vbCrLf

' fname = Dir()

' Loop

' ret = MsgBox("【" & AC & "選択】" & filestr, vbOKCancel)

' If ret <> vbOK Then Exit Sub

' For i = 0 To UBound(fnames)

' '日本語のみURLエンコード*************************************************************

' '一文字づつ取り出し、半角記号以外をURLエンコードします。

' URLname = Replace(BookFolder & hkey, "http", "file")

' URLname = Replace(BookFolder & hkey, "ぎじゅなびWF承認", "%E3%81%8E%E3%81%98%E3%82%85%E3%81%AA%E3%81%B3WF%E6%89%BF%E8%AA%8D")

' URLname = "file:" & Replace(URLname, "\", "/")

' filestr = Replace(filestr, "\", "/")

' Dim objApp As New Excel.Application

' For K = 1 To Len(filestr)

' strMoji = Mid(filestr, K, 1)

' If strMoji Like "[ -/:-@\[-~]" Then

' strMojiTemp = strMojiTemp & strMoji

' Else

' strMojiTemp = strMojiTemp & objApp.WorksheetFunction.EncodeURL(strMoji)

' End If

' Next

'

' 'URLエンコード後の文字列を結合していきます。

' If strEncodeMoji = "" Then

' strEncodeMoji = strMojiTemp

' Else

' strEncodeMoji = strEncodeMoji & vbLf & strMojiTemp

' End If

'

' 'URLエンコード処理をおこなった文字列を出力します。

' filestr = Replace(strEncodeMoji, " ", "%20")

' URLname = URLname & "/" & filestr

' 'エンコード済************************************************************************

' CreateObject("WScript.Shell").Run ("MicrosoftEdge.exe -url " & URLname) '("chrome.exe -url " & URLname)

'

Next

'MsgBox BookFolder & hkey & "\" & filestr

'ActiveSheet.Hyperlinks.add Anchor:=cl, Address:=BookFolder & hkey & "\" & filestr

'ハイパーリンクの設定

Exit Sub 'On Error GoTo エラー処理

エラー処理:

MsgBox "ぎじゅなびアクセス権がありません。"

End If

Exit_製造仕様書番号_Plan_Click:

Exit Sub

Err_製造仕様書番号_Plan_Click:

MsgBox Err.Description

Resume Exit_製造仕様書番号_Plan_Click

End Sub

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@

'OSのビット数(32bit/64bit)及びExcelのビット数に応じて、以下の部分を書き換えて下さい

'(a) OS、Excelいずれも64bitのケース(SheepSmartCard64.dllをC:\Windows\System32に置いて下さい)

Private Declare PtrSafe Function GetSmartCardUID Lib "SheepSmartCard64.dll" (ByVal SCardUID As String) As Integer

'(b) OSは64bit、Excelは32bitのケース(SheepSmartCard32.dllをC:\Windows\SysWOW64に置いて下さい)

'Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'(c) OS、Excelいずれも32bitのケース(SheepSmartCard32.dllをC:\Windows\System32に置いて下さい)

'Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'dllをシステムフォルダ以外に置く場合は上記のSheepSmartCard64.dll(SheepSmartCard32.dll)の部分をフルパスで記述して下さい

Private Sub Btn_ReadUID_Click()

Dim i As Long

Dim sID As String

Dim sName As String

Dim colIDName As New Collection

For i = 1 To 2

sID = Sheet3.Cells(i, 1).Value

sName = Sheet3.Cells(i, 2).Value

Call colIDName.Add(sName, sID)

Next

Dim ret As Integer

Dim strCardUID As String

strCardUID = String$(128, vbNullChar) '70 15-30 T. Null

ret = GetSmartCardUID(strCardUID)

strCardUID = Replace(strCardUID, vbNullChar, "") '5 Null

If ret = 0 Then

'ActiveSheet.Cells(5, 3).Value = strCardUID

On Error Resume Next

ActiveSheet.Cells(5, 3).Value = colIDName.Item(strCardUID)

If CBool(Err) Then

ActiveSheet.Cells(5, 3).Value = "該当無し"

Call Err.Clear

End If

On Error GoTo 0

ActiveSheet.Cells(7, 3).Value = Null

Else

ActiveSheet.Cells(5, 3).Value = Null

If ret = 100 Then

ActiveSheet.Cells(7, 3).Value = "カードがセットされていないか、 または読み取りできないカードがセットされています。"

ElseIf ret = 200 Then

ActiveSheet.Cells(7, 3).Value = "カードリーダーを認識できません。 接続されているかご確認下さい。"

ElseIf ret = 300 Then

ActiveSheet.Cells(7, 3).Value = "スマートカードサービスが起動していないか、またはインストールされていません。 "

ElseIf ret = 400 Then

ActiveSheet.Cells(7, 3).Value = "カードIDの取得に失敗しました。"

Else

ActiveSheet.Cells(7, 3).Value = "予期しないエラーが発生しました。"

End If

End If

End Sub

''OSのビット数(32bit/64bit)及びExcelのビット数に応じて、以下の部分を書き換えて下さい

'

''(a) OS、Excelいずれも64bitのケース(SheepSmartCard64.dllをC:\Windows\System32に置いて下さい)

'Private Declare PtrSafe Function GetSmartCardUID Lib "SheepSmartCard64.dll" (ByVal SCardUID As String) As Integer

'

''(b) OSは64bit、Excelは32bitのケース(SheepSmartCard32.dllをC:\Windows\SysWOW64に置いて下さい)

''Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'

''(c) OS、Excelいずれも32bitのケース(SheepSmartCard32.dllをC:\Windows\System32に置いて下さい)

''Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'

''dllをシステムフォルダ以外に置く場合は上記のSheepSmartCard64.dll(SheepSmartCard32.dll)の部分をフルパスで記述して下さい

'

'Private Sub Btn_ReadUID_Click()

'

' Dim ret As Integer

' Dim strCardUID As String

'

' strCardUID = String$(128, vbNullChar) '空文字のままで関数に渡すとエラーとなるので、Null文字で埋めておきます

'

' ret = GetSmartCardUID(strCardUID)

'

' strCardUID = Replace(strCardUID, vbNullChar, "") '文字列からNull文字を除去

'

' If ret = 0 Then

' ActiveSheet.Cells(5, 3).Value = strCardUID

' ActiveSheet.Cells(7, 3).Value = Null

' Else

' ActiveSheet.Cells(5, 3).Value = Null

' If ret = 100 Then

' ActiveSheet.Cells(7, 3).Value = "カードがセットされていないか、または読み取りできないカードがセットされています。"

' ElseIf ret = 200 Then

' ActiveSheet.Cells(7, 3).Value = "カードリーダーを認識できません。接続されているかご確認下さい。"

' ElseIf ret = 300 Then

' ActiveSheet.Cells(7, 3).Value = "スマートカードサービスが起動していないか、またはインストールされていません。"

' ElseIf ret = 400 Then

' ActiveSheet.Cells(7, 3).Value = "カードIDの取得に失敗しました。"

' Else

' ActiveSheet.Cells(7, 3).Value = "予期しないエラーが発生しました。"

' End If

' End If

'

'End Sub

'

@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Sub 選択メールを転送する()

Dim objFwItem As Outlook.MailItem

'現在表示中のメールアイテムを転送メールとしてセットします。

Set objFwItem = ActiveInspector.CurrentItem.Forward

'転送先を指定します。

'転送先アドレスを指定してください。

objFwItem.To = "test@extan.jp; test@extan.jp"

'CCを指定してください。

objFwItem.CC = "test1@extan.jp; test2@extan.jp"

objFwItem.Recipients.ResolveAll

'表示します。

objFwItem.Display

'オブジェクトの開放

Set objFwItem = Nothing

End Sub

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Sub ForwardTest()

'023 Outlook VBA 転送メールを作成

'受信ボックスで選択している1番目のメールを抽出する

Dim objSelect As Outlook.Selection

Dim objItem As Object

Set objSelect = Outlook.Application.ActiveExplorer.Selection

Set objItem = objSelect.Item(1)

'返信メールとしてobjReplyを作成する

Dim objFW As Object

Set objFW = objItem.Forward

'転送メールを記述する。

'件名や宛先はReplyメソッドで返信設定されるので、BodyだけでOK

'Bodyに返信元の文章データが入っているので、最後に+.Bodyを書く

With objFW

'転送先を指定します。

'転送先アドレスを指定してください。

.To = "test@extan.jp; test@extan.jp"

' 'CCを指定してください。

' .CC = "test1@extan.jp; test2@extan.jp"

'件名を指定します。

.Subject = .Subject & "<メール転送します>"

.Body = "各位" & vbCrLf & vbCrLf & _

"お疲れ様です。" & vbCrLf & vbCrLf & _

"転送です" + .Body

.Display 'ウィンドウ表示する

' .Save '下書き保存する

' .Send '送信ボックスへ送る

End With

End Sub

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

’@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

’Outlookオブジェクトを利用してVBScriptでメールを送信する方法

'Outlookオブジェクトの変数宣言

Dim olObj

Set olObj = CreateObject("Outlook.Application")

'メール送信用のオブジェクト作成

Dim mailObj

Set mailObj = olObj.CreateItem(olMailItem)

'メール送信内容の作成

With mailObj

.To = "admin@selifelog.com" '宛先

.CC = "admin@selifelog.com" 'CCに指定する宛先、不要なら行ごと削除

.BCC = "admin@selifelog.com" 'BCCに指定する宛先、不要なら行ごと削除

.Subject = "テストメール" 'メールの件名

.Body = "お疲れさまです。" 'メールの本文

.BodyFormat = 1 'メールの形式(1:テキスト形式)

End With

'メール送信

mailObj.Send

’@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

’@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Public Function fncXlsOpen(strBookName As String) As Boolean

'◆ブックが開いているか確認用Function

Dim objWB As Workbook

fncXlsOpen = False

For Each objWB In Workbooks

If objWB.Name = strBookName Then

fncXlsOpen = True

End If

Next objWB

End Function

Sub 選択データ転記()

Dim c As Range

Dim add1 As Long 'String '元アドレス格納

Dim add2 As Long 'String '先アドレス格納

Dim slctcol As Long

Dim strcol1 As Long '元シート開始Col

Dim endcol1 As Long '元シート終了Col

Dim strcol2 As Long '転記先シート開始Col

Dim endcol2 As Long '転記先シート終了Col

Dim slctLOT As String '検索文字

Dim bkname1 As String '元ブック名

Dim bkname2 As String '転記先ブック名

Dim shname1 As String '元シート名

Dim shname2 As String '転記先シート名

Dim shnameE As String '転記先エラーログ用シート名

Dim path As String

Dim strFileName As String

bkname1 = "A検査データ"

bkname2 = "A検査DB"

shname1 = "A検査DBP"

shname2 = "A検査DB"

shnameE = "エラーログ"

strcol1 = 6

endcol1 = strcol1 + 5

strcol2 = 9

endcol2 = strcol2 + 5

'Range(Cells(2, 1), Cells(8, 7))

Application.ScreenUpdating = False

'************************************************************************************************

path = "C:\Users\USER\OneDrive\ドキュメント\work\A検査DB.xlsm"

If Dir(path) <> "" Then

'ブックが開いているか確認する()

strFileName = "A検査DB.xlsm"

'◆ブックが開いているか確認して、開いていなかったら終了

If fncXlsOpen(strFileName) = False Then

' Workbooks.Open ThisWorkbook.path & "\" & strFileName

Workbooks.Open path

Workbooks(bkname1).Activate

' ActiveWindow.Visible = False

' MsgBox strFileName & "を開いてから実行してください。"

' End

' Else

' MsgBox strFileName & "はすでに開いています。"

End If

Else

' MsgBox path & "が存在しません!"

MsgBox strFileName & "を開いてから実行してください。"

End If

'************************************************************************************************

slctcol = ActiveCell.Column

If slctcol = "5" Then

For Each c In Selection.Cells

c.Select

'MsgBox c.Address(False, False)

slctLOT = c.Value

add1 = c.Row 'c.Address

' MsgBox slctLOT

' Workbooks(bkname2).Worksheets(shname2).Cells.Find (slctLOT)

'On Error GoTo notfind

add2 = Workbooks(bkname2).Worksheets(shname2).Range("E11:E200000").Find(slctLOT).Row '.Address

'MsgBox Workbooks(bkname2).Worksheets(shname2).Range("E11:E200000").Find(slctLOT).Address

Workbooks(bkname1).Worksheets(shname1).Range(add1).Offset(0, 1).Resize(, 5).Copy

Workbooks(bkname2).Worksheets(shname2).Range(add2).Offset(0, 4).PasteSpecial Paste:=xlPasteValues

'Workbooks(bkname2).Worksheets(shname2).Range(Cells(add2, strcol2), Cells(add2, endcol2)).FormulaR1C1 = Workbooks(bkname1).Worksheets(shname1).Range(Cells(add1, strcol1), Cells(add1, endcol1)).FormulaR1C1

Next

End If

Application.ScreenUpdating = True

Exit Sub

notfind:

MsgBox slctLOT & "_not find"

n = Workbooks(bkname2).Worksheets(shnameE).Cells(Rows.Count, "A").End(xlUp).Row + 1

' Workbooks(bkname2).Worksheets(shnameE).Range("E" & n).Offset(0, 4).PasteSpecial Paste:=xlPasteValues

Workbooks(bkname2).Worksheets(shname2).Range(Cells(add2, strcol2), Cells(add2, endcol2)).Value = Workbooks(bkname1).Worksheets(shname1).Range(Cells(add1, strcol1), Cells(add1, endcol1)).Value

Workbooks(bkname2).Worksheets(shnameE).Range("E" & n).Value = slctLOT

Workbooks(bkname2).Worksheets(shnameE).Range("A" & n).Value = Format(Now, "yyyy/mm/dd hh:nn")

Resume Next

End Sub

’@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

■1920-1080.bat■■■■■■

powershell -NoProfile -ExecutionPolicy Unrestricted .\1920-1080.ps1

■1920-1080.ps1■■■■■■

Function Set-ScreenResolution {

<#

.Synopsis

Sets the Screen Resolution of the primary monitor

.Description

Uses Pinvoke and ChangeDisplaySettings Win32API to make the change

.Example

Set-ScreenResolution -Width 1024 -Height 768

#>

param (

[Parameter(Mandatory=$true,

Position = 0)]

[int]

$Width,

[Parameter(Mandatory=$true,

Position = 1)]

[int]

$Height

)

$pinvokeCode = @"

using System;

using System.Runtime.InteropServices;

namespace Resolution

{

[StructLayout(LayoutKind.Sequential)]

public struct DEVMODE1

{

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string dmDeviceName;

public short dmSpecVersion;

public short dmDriverVersion;

public short dmSize;

public short dmDriverExtra;

public int dmFields;

public short dmOrientation;

public short dmPaperSize;

public short dmPaperLength;

public short dmPaperWidth;

public short dmScale;

public short dmCopies;

public short dmDefaultSource;

public short dmPrintQuality;

public short dmColor;

public short dmDuplex;

public short dmYResolution;

public short dmTTOption;

public short dmCollate;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string dmFormName;

public short dmLogPixels;

public short dmBitsPerPel;

public int dmPelsWidth;

public int dmPelsHeight;

public int dmDisplayFlags;

public int dmDisplayFrequency;

public int dmICMMethod;

public int dmICMIntent;

public int dmMediaType;

public int dmDitherType;

public int dmReserved1;

public int dmReserved2;

public int dmPanningWidth;

public int dmPanningHeight;

};

class User_32

{

[DllImport("user32.dll")]

public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);

[DllImport("user32.dll")]

public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);

public const int ENUM_CURRENT_SETTINGS = -1;

public const int CDS_UPDATEREGISTRY = 0x01;

public const int CDS_TEST = 0x02;

public const int DISP_CHANGE_SUCCESSFUL = 0;

public const int DISP_CHANGE_RESTART = 1;

public const int DISP_CHANGE_FAILED = -1;

}

public class PrmaryScreenResolution

{

static public string ChangeResolution(int width, int height)

{

DEVMODE1 dm = GetDevMode1();

if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))

{

dm.dmPelsWidth = width;

dm.dmPelsHeight = height;

int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);

if (iRet == User_32.DISP_CHANGE_FAILED)

{

return "Unable To Process Your Request. Sorry For This Inconvenience.";

}

else

{

iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);

switch (iRet)

{

case User_32.DISP_CHANGE_SUCCESSFUL:

{

return "Success";

}

case User_32.DISP_CHANGE_RESTART:

{

return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.";

}

default:

{

return "Failed To Change The Resolution";

}

}

}

}

else

{

return "Failed To Change The Resolution.";

}

}

private static DEVMODE1 GetDevMode1()

{

DEVMODE1 dm = new DEVMODE1();

dm.dmDeviceName = new String(new char[32]);

dm.dmFormName = new String(new char[32]);

dm.dmSize = (short)Marshal.SizeOf(dm);

return dm;

}

}

}

"@

Add-Type $pinvokeCode -ErrorAction SilentlyContinue

[Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height)

}

Set-ScreenResolution -Width 1920 -Height 1080

Sub 発注依頼()

OrderForm.Show

End Sub

'____________________

Private Sub CommandButton1_Click() '処理ボタン

Dim myRange As Range

Dim rngSearch As Range

Dim chk_flg As Boolean

If Me.TextBox1 = "" Or Me.TextBox2 = "" Then

MsgBox "TextBoxが空白です。"

Exit Sub

End If

Set myRange = ActiveSheet.Range("A3:C7")

Set rngSearch = myRange.Find(What:=TextBox1.Value, LookAt:=xlPart)

ActiveSheet.Cells(rngSearch.Row, rngSearch.Column + 7).Value = "発注依頼"

ActiveSheet.Cells(rngSearch.Row, rngSearch.Column + 8).Value = Format(Now, "yyyy年mm月dd日 hh時mm分ss秒")

'ログ

Me.Hide 'フォームを閉じる

' Dim chk_flg As Boolean

'

' If Me.CommandButton2.Caption = "削除" Then '削除ボタンの場合

' If MsgBox("表示中のレコードを削除します。よろしいですか?", vbOKCancel) <> 1 Then Exit Sub '確認

' Call TranDataCheck '販売データチェック(本文未収録エラー処理)

' Call DBdelete '削除プロシージャ呼び出し

' Else '追加・更新ボタンの場合

' '処理前にチェック

' If Me.TextBox3 = "" Then chk_flg = True '日付が空欄ならフラグを立てる

' If IsNumeric(Me.TextBox4) = False Then chk_flg = True '数量が数字じゃなければフラグを立てる

' '条件を加えたかったらここへ追加

' If chk_flg = True Then 'フラグが立っていたら

' MsgBox "NG項目があります。"

' Exit Sub

' End If

'

' '------------ここより本文未収録のエラー処理------------

' If Me.ComboBox1 = "" Or Me.ComboBox2 = "" Or Me.ComboBox3 = "" Then

' MsgBox "コンボボックスが空白です。"

' Exit Sub

' End If

' If IsDate(Me.TextBox3) = False Then

' MsgBox "日付の形式が正しくありません。"

' Exit Sub

' End If

' If Me.TextBox3 <> StrConv(Me.TextBox3, vbNarrow) Then

' MsgBox "日付は半角で入力してください。"

' Exit Sub

' End If

' If IsNumeric(Me.TextBox4) = False Or IsNumeric(Me.TextBox5) = False Then

' MsgBox "数量が空白、または形式が正しくありません。"

' Exit Sub

' End If

' If Me.TextBox4 <> StrConv(Me.TextBox4, vbNarrow) Or Me.TextBox5 <> StrConv(Me.TextBox5, vbNarrow) Then

' MsgBox "数値は半角で入力してください。"

' Exit Sub

' End If

'

' Call MasterDataCheck1 'マスターデータチェック(本文未収録エラー処理)

' If Me.CommandButton2.Caption = "更新" Then Call TranDataCheck '販売データチェック(本文未収録エラー処理)

' '------------ここまで本文未収録のエラー処理------------

'

' If Me.CommandButton2.Caption = "追加" Then Call DBinsert '追加プロシージャ呼び出し

' If Me.CommandButton2.Caption = "更新" Then Call DBupdate '更新プロシージャ呼び出し

' End If

' Me.Hide 'フォームを閉じる

' Call DBselect '読込プロシージャ呼び出し

End Sub

Private Sub CommandButton3_Click() '閉じるボタン

Me.Hide 'フォームを閉じる

End Sub

Private Sub CommandButton4_Click()

Dim myRange As Range

Dim rngSearch As Range

Dim chk_flg As Boolean

If Me.TextBox1 = "" Or Me.TextBox2 = "" Then

MsgBox "TextBoxが空白です。"

Exit Sub

End If

Set myRange = ActiveSheet.Range("A3:C7")

Set rngSearch = myRange.Find(What:=TextBox1.Value, LookAt:=xlPart)

ActiveSheet.Cells(rngSearch.Row, rngSearch.Column + 7).Value = ""

Me.Hide 'フォームを閉じる

End Sub

Private Sub TextBox1_AfterUpdate()

Dim myRange As Range

Dim rngSearch As Range

Set myRange = ActiveSheet.Range("A3:C7")

Set rngSearch = myRange.Find(What:=TextBox1.Value, LookAt:=xlPart)

If Not rngSearch Is Nothing Then

'ヒットした値をテキストボックス2にセット

TextBox2.Value = ActiveSheet.Cells(rngSearch.Row, rngSearch.Column + 2).Value

End If

End Sub

Private Sub UserForm_Click()

End Sub

Sub グラフ位置取得()

'選択していること

With ActiveSheet.ChartObjects(1)

MsgBox "左からの位置は " & .Left & vbCrLf & _

"上からの位置は " & .Top & vbCrLf & _

"幅は   " & .Width & vbCrLf & _

"高さは  " & .Height

End With

With ActiveSheet.ChartObjects(2)

MsgBox "左からの位置は " & .Left & vbCrLf & _

"上からの位置は " & .Top & vbCrLf & _

"幅は   " & .Width & vbCrLf & _

"高さは  " & .Height

End With

End Sub


Option Explicit

Public Sub シート追加()

Dim addedSheet As Worksheet

Dim myWBName As String

myWBName = ActiveWorkbook.Name

MsgBox myWBName

Dim i As Long

i = InStrRev(myWBName, ".")

If i > 0 Then myWBName = Left(myWBName, i - 1)

MsgBox "拡張子を除いたブック名: " & myWBName

Dim ws As Worksheet, flag As Boolean

For Each ws In Worksheets

If ws.Name = myWBName Then flag = True

Next ws

If flag = True Then

MsgBox "シートがあります", vbInformation

Else

MsgBox "シートはありません", vbInformation

'先頭にシートを追加

Set addedSheet = Worksheets.Add(Before:=Worksheets(1))

addedSheet.Name = myWBName

End If

End Sub


★アクセス

Option Explicit '変数の宣言を強制する

'---ACCESS接続用

Public adoCn As Object 'ADOコネクションオブジェクト

Public adoRs As Object 'ADOレコードセットオブジェクト

Public strSQL As String 'SQL文

'---カレンダー用

Public clndr_date As Date '日付を格納する変数

Public clndr_flg As Boolean 'カレンダーがクリックされたか判定するフラグ

Sub DBconnect(flg As Boolean) 'DB接続プロシージャ

Dim DBpath As String

DBpath = ThisWorkbook.Path 'DBが同じ階層にある場合

'DBpath = "C:\Users\user1\Documents" 'DBが違う階層にある場合はパスを指定

Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成

If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成

adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _

"Data Source=" & DBpath & "\DataExchange.accdb;" 'Accessファイルを開く

End Sub

Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ

If flg = True Then adoRs.Close 'レコードセットのクローズ

adoCn.Close 'コネクションのクローズ

Set adoRs = Nothing 'オブジェクトの破棄

Set adoCn = Nothing

End Sub

Sub DBinsert_all() '一括書込

Dim start_i As Long, end_i As Long, n As Long, ShtName As String

ShtName = ActiveSheet.Name 'アクティブシート名を取得

Select Case ShtName

Case "販売データ", "商品マスター", "取引先マスター", "営業所マスター", "社員マスター"

If MsgBox("一括書込を実行しようとしています。続けますか?", vbOKCancel) <> 1 Then 'メッセージ

Exit Sub 'OK以外なら終了

End If

Case Else

MsgBox "このシートからは一括書込できません。"

Exit Sub '終了

End Select

If MsgBox( _

"Accessの「" & ShtName & "」テーブルのデータを一度削除し、" & vbCrLf & _

"現在このシートにある情報のみが書き込まれます。" & vbCrLf & _

"書込み終了後、このシートは削除されます。" & vbCrLf & _

vbCrLf & _

"実行してよろしいですか?", vbOKCancel + vbExclamation, "一括書込み") <> 1 Then 'メッセージ

Exit Sub 'OK以外なら終了

End If

start_i = 2 'スタート行

end_i = Range("A1").End(xlDown).Row '最終行取得

Call DBconnect(False) 'DB接続

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ

adoCn.BeginTrans 'トランザクション開始

strSQL = "DELETE FROM " & ShtName & ";" 'テーブル内データを全削除

adoCn.Execute strSQL '削除実行

For n = start_i To end_i 'データのある行を繰り返す

Select Case ShtName 'シート名を判別して対応するSQLを作成

Case "販売データ"

strSQL = _

"INSERT INTO " & ShtName & "(" & _

"商品コード, " & _

"売上日, " & _

"数量, " & _

"売価, " & _

"取引先コード, " & _

"社員コード) " & _

"VALUES(" & _

"'" & Cells(n, 1) & "', " & _

"#" & CDate(Cells(n, 2)) & "#, " & _

Cells(n, 3) & ", " & _

Cells(n, 4) & ", " & _

"'" & Cells(n, 5) & "', " & _

"'" & Cells(n, 6) & "');"

Case "商品マスター"

strSQL = _

"INSERT INTO " & ShtName & "(" & _

"商品コード, " & _

"商品名, " & _

"製造場所, " & _

"定価, " & _

"原価) " & _

"VALUES(" & _

"'" & Cells(n, 1) & "', " & _

"'" & Cells(n, 2) & "', " & _

"'" & Cells(n, 3) & "', " & _

Cells(n, 4) & ", " & _

Cells(n, 5) & ");"

Case "取引先マスター"

strSQL = _

"INSERT INTO " & ShtName & "(" & _

"取引先コード, " & _

"取引先, " & _

"住所, " & _

"電話番号) " & _

"VALUES(" & _

"'" & Cells(n, 1) & "', " & _

"'" & Cells(n, 2) & "', " & _

"'" & Cells(n, 3) & "', " & _

"'" & Cells(n, 4) & "');"

Case "営業所マスター"

strSQL = _

"INSERT INTO " & ShtName & "(" & _

"営業所コード, " & _

"営業所, " & _

"住所, " & _

"電話番号) " & _

"VALUES(" & _

"'" & Cells(n, 1) & "', " & _

"'" & Cells(n, 2) & "', " & _

"'" & Cells(n, 3) & "', " & _

"'" & Cells(n, 4) & "');"

Case "社員マスター"

strSQL = _

"INSERT INTO " & ShtName & "(" & _

"社員コード, " & _

"社員名, " & _

"入社日, " & _

"住所, " & _

"電話番号, " & _

"営業所コード) " & _

"VALUES(" & _

"'" & Cells(n, 1) & "', " & _

"'" & Cells(n, 2) & "', " & _

"#" & Cells(n, 3) & "#, " & _

"'" & Cells(n, 4) & "', " & _

"'" & Cells(n, 5) & "', " & _

"'" & Cells(n, 6) & "');"

End Select

adoCn.Execute strSQL '書込実行

Next n

adoCn.CommitTrans 'トランザクション終了(確定処理)

Call DBcut_off(False) 'DB切断

MsgBox "正常に完了しました。" & vbCrLf & "「" & ShtName & "」シートを削除します。"

Application.DisplayAlerts = False '警告オフ

Sheets(ShtName).Delete 'シート削除

Application.DisplayAlerts = True '警告オン

Exit Sub '正常ならここで終了

Err_Handler: 'エラーが起きたらここへ飛ぶ

adoCn.RollbackTrans 'ロールバック

Call DBcut_off(False) 'DB切断

MsgBox Error$ 'エラーメッセージ表示

Debug.Print Error$ 'デバッグ表示

Debug.Print strSQL

End Sub

Sub MainStart()

If ActiveSheet.Name <> "販売管理" Then '「販売管理」以外のシートだったら

MsgBox "このシートからはメインフォームを起動できません。"

Exit Sub '終了

End If

MainForm.Show '「MainForm」を開く

End Sub

Sub DBselect() 'DB読込

Dim i As Long, end_i As Long, chk_flg As Boolean

Dim check1 As String, check2 As String, check3 As String, check4 As String

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ

With SelectForm

'条件1

If .TextBox1 = "" Then '商品コードが空欄の場合

check1 = ""

Else '商品コードが記入済の場合

check1 = "WHERE 販売データ.商品コード = '" & .TextBox1 & "' " '条件作成

chk_flg = True

End If

'条件2

If .TextBox2 = "" Or .TextBox3 = "" Then '日付がどちらか空欄の場合

check2 = ""

Else '日付が記入済の場合

If chk_flg = False Then '初めての条件なら

check2 = "WHERE"

chk_flg = True

Else

check2 = "AND"

End If

check2 = check2 & " 販売データ.売上日 BETWEEN #" & .TextBox2 & "# AND #" & .TextBox3 & "# " '条件作成

End If

'条件3

If .TextBox4 = "" Then '数量が空欄の場合

check3 = ""

Else '数量が記入済の場合

If chk_flg = False Then '初めての条件なら

check3 = "WHERE"

chk_flg = True

Else

check3 = "AND"

End If

check3 = check3 & " 販売データ.数量"

Select Case .ComboBox1

Case "以上"

check3 = check3 & " >= "

Case "以下"

check3 = check3 & " <= "

Case Else

check3 = check3 & " = "

End Select

check3 = check3 & .TextBox4 & " "

End If

'条件4

If .TextBox5 = "" Then '検索テキストが空欄の場合

check4 = ""

Else '検索テキストが記入済の場合

If chk_flg = False Then '初めての条件なら

check4 = "WHERE"

chk_flg = True

Else '2番目以降なら

check4 = "AND"

End If

Select Case .ComboBox2

Case "商品名", "製造場所"

check4 = check4 & " 商品マスター." & .ComboBox2

Case "取引先"

check4 = check4 & " 取引先マスター." & .ComboBox2

Case "営業所"

check4 = check4 & " 営業所マスター." & .ComboBox2

Case "社員名"

check4 = check4 & " 社員マスター." & .ComboBox2

End Select

check4 = check4 & " LIKE '%" & .TextBox5 & "%' " '~を含む

End If

End With

Call DBconnect(True) 'DB接続

strSQL = _

"SELECT " & _

"販売データ.販売コード, " & _

"販売データ.商品コード, " & _

"商品マスター.商品名, " & _

"販売データ.売上日, " & _

"販売データ.数量, " & _

"販売データ.売価, " & _

"商品マスター.製造場所, " & _

"商品マスター.定価, " & _

"商品マスター.原価, " & _

"取引先マスター.取引先, " & _

"営業所マスター.営業所, " & _

"社員マスター.社員名 " & _

"FROM ((( 販売データ " & _

"INNER JOIN 商品マスター ON 販売データ.商品コード = 商品マスター.商品コード ) " & _

"INNER JOIN 社員マスター ON 販売データ.社員コード = 社員マスター.社員コード ) " & _

"INNER JOIN 取引先マスター ON 販売データ.取引先コード = 取引先マスター.取引先コード ) " & _

"INNER JOIN 営業所マスター ON 社員マスター.営業所コード = 営業所マスター.営業所コード " & _

check1 & _

check2 & _

check3 & _

check4 & _

"ORDER BY 売上日 DESC;"

adoRs.Open strSQL, adoCn 'SQLを実行して対象をRecordSetへ

If adoRs.BOF = True And adoRs.EOF = True Then 'データがなかったら

Call DBcut_off(True) 'DB切断

MsgBox "対象データがありません。"

Exit Sub '終了

End If

i = 2 'スタート行

end_i = Range("A1").End(xlDown).Row 'エンド行

Range("A" & i & ":L" & end_i).ClearContents '前のデータクリア

'レコードセットからの取り出し方法1

Do Until adoRs.EOF 'レコードセットが終了するまで処理を繰り返す

Cells(i, 1) = adoRs!販売コード

Cells(i, 2) = adoRs!商品コード

Cells(i, 3) = adoRs!商品名

Cells(i, 4) = adoRs!売上日

Cells(i, 5) = adoRs!数量

Cells(i, 6) = adoRs!売価

Cells(i, 7) = adoRs!製造場所

Cells(i, 8) = adoRs!定価

Cells(i, 9) = adoRs!原価

Cells(i, 10) = adoRs!取引先

Cells(i, 11) = adoRs!営業所

Cells(i, 12) = adoRs!社員名

i = i + 1 '行をカウントアップする

adoRs.MoveNext '次のレコードに移動する

Loop

'レコードセットからの取り出し方法2

'Range("A2").CopyFromRecordset adoRs 'A2セルを起点にデータを貼り付け

Call DBcut_off(True) 'DB切断

Exit Sub '正常ならここで終了

Err_Handler: 'エラーが起きたらここへ飛ぶ

Call DBcut_off(False) 'DB切断

MsgBox Error$ 'エラーメッセージ表示

Debug.Print Error$ 'デバッグ表示

Debug.Print strSQL

End Sub

Sub DBinsert() 'DB追加

Call DBconnect(False) 'DB接続

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ

adoCn.BeginTrans 'トランザクション開始

With ManagementForm

strSQL = _

"INSERT INTO 販売データ(" & _

"商品コード, " & _

"売上日, " & _

"数量, " & _

"売価, " & _

"取引先コード, " & _

"社員コード) " & _

"VALUES(" & _

"'" & .ComboBox1 & "', " & _

"#" & CDate(.TextBox3) & "#, " & _

.TextBox4 & ", " & _

.TextBox5 & ", " & _

"'" & .ComboBox2.Column(1) & "', " & _

"'" & .ComboBox3.Column(1) & "');"

End With

adoCn.Execute strSQL '実行

adoCn.CommitTrans 'トランザクション終了(確定処理)

Call DBcut_off(False) 'DB切断

MsgBox "正常に完了しました"

Exit Sub '正常ならここで終了

Err_Handler: 'エラーが起きたらここへ飛ぶ

adoCn.RollbackTrans 'ロールバック

Call DBcut_off(False) 'DB切断

MsgBox Error$ 'エラーメッセージ表示

Debug.Print Error$ 'デバッグ表示

Debug.Print strSQL

End Sub

Sub DBupdate() 'DB更新

Call DBconnect(False) 'DB接続

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ

adoCn.BeginTrans 'トランザクション開始

With ManagementForm

strSQL = _

"UPDATE 販売データ " & _

"SET " & _

"商品コード = '" & .ComboBox1 & "', " & _

"売上日 = #" & CDate(.TextBox3) & "#, " & _

"数量 = " & .TextBox4 & ", " & _

"売価 = " & .TextBox5 & ", " & _

"取引先コード = '" & .ComboBox2.Column(1) & "', " & _

"社員コード = '" & .ComboBox3.Column(1) & "' " & _

"WHERE 販売コード = " & .TextBox1 & ";"

End With

adoCn.Execute strSQL '実行

adoCn.CommitTrans 'トランザクション終了(確定処理)

Call DBcut_off(False) 'DB切断

MsgBox "正常にデータ更新しました"

Exit Sub '正常ならここで終了

Err_Handler: 'エラーが起きたらここへ飛ぶ

adoCn.RollbackTrans 'ロールバック

Call DBcut_off(False) 'DB切断

MsgBox Error$ 'エラーメッセージ表示

Debug.Print Error$ 'デバッグ表示

Debug.Print strSQL

End Sub

Sub DBdelete() 'DB削除

Call DBconnect(False) 'DB接続

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ

adoCn.BeginTrans 'トランザクション開始

strSQL = _

"DELETE FROM 販売データ WHERE 販売コード = " & ManagementForm.TextBox1 & ";"

adoCn.Execute strSQL '実行

adoCn.CommitTrans 'トランザクション終了(確定処理)

Call DBcut_off(False) 'DB切断

MsgBox "正常に削除しました"

Exit Sub '正常ならここで終了

Err_Handler: 'エラーが起きたらここへ飛ぶ

adoCn.RollbackTrans 'ロールバック

Call DBcut_off(False) 'DB切断

MsgBox Error$ 'エラーメッセージ表示

Debug.Print Error$ 'デバッグ表示

Debug.Print strSQL

End Sub


★マネジメントフォーム

Option Explicit

Private Sub CommandButton1_Click() 'カレンダー表示

clndr_flg = False

If Me.TextBox3 = "" Or IsDate(Me.TextBox3) = False Then

clndr_date = Date

Else

clndr_date = Me.TextBox3 '日付を格納

End If

CalenderForm.Show 'カレンダーを開く

If clndr_flg = True Then Me.TextBox3 = Format(clndr_date, "yyyy/mm/dd") 'クリックされた日付を上書き

End Sub

Private Sub CommandButton2_Click() '処理ボタン

Dim chk_flg As Boolean

If Me.CommandButton2.Caption = "削除" Then '削除ボタンの場合

If MsgBox("表示中のレコードを削除します。よろしいですか?", vbOKCancel) <> 1 Then Exit Sub '確認

Call TranDataCheck '販売データチェック(本文未収録エラー処理)

Call DBdelete '削除プロシージャ呼び出し

Else '追加・更新ボタンの場合

'処理前にチェック

If Me.TextBox3 = "" Then chk_flg = True '日付が空欄ならフラグを立てる

If IsNumeric(Me.TextBox4) = False Then chk_flg = True '数量が数字じゃなければフラグを立てる

'条件を加えたかったらここへ追加

If chk_flg = True Then 'フラグが立っていたら

MsgBox "NG項目があります。"

Exit Sub

End If

'------------ここより本文未収録のエラー処理------------

If Me.ComboBox1 = "" Or Me.ComboBox2 = "" Or Me.ComboBox3 = "" Then

MsgBox "コンボボックスが空白です。"

Exit Sub

End If

If IsDate(Me.TextBox3) = False Then

MsgBox "日付の形式が正しくありません。"

Exit Sub

End If

If Me.TextBox3 <> StrConv(Me.TextBox3, vbNarrow) Then

MsgBox "日付は半角で入力してください。"

Exit Sub

End If

If IsNumeric(Me.TextBox4) = False Or IsNumeric(Me.TextBox5) = False Then

MsgBox "数量が空白、または形式が正しくありません。"

Exit Sub

End If

If Me.TextBox4 <> StrConv(Me.TextBox4, vbNarrow) Or Me.TextBox5 <> StrConv(Me.TextBox5, vbNarrow) Then

MsgBox "数値は半角で入力してください。"

Exit Sub

End If

Call MasterDataCheck1 'マスターデータチェック(本文未収録エラー処理)

If Me.CommandButton2.Caption = "更新" Then Call TranDataCheck '販売データチェック(本文未収録エラー処理)

'------------ここまで本文未収録のエラー処理------------

If Me.CommandButton2.Caption = "追加" Then Call DBinsert '追加プロシージャ呼び出し

If Me.CommandButton2.Caption = "更新" Then Call DBupdate '更新プロシージャ呼び出し

End If

Me.Hide 'フォームを閉じる

Call DBselect '読込プロシージャ呼び出し

End Sub

Private Sub CommandButton3_Click() '閉じるボタン

Me.Hide 'フォームを閉じる

End Sub

Private Sub ComboBox1_Change() '商品コードが変更されたとき

If Me.ComboBox1 <> "" Then

Call MasterDataCheck2("商品マスター", "商品コード", Me.ComboBox1) 'マスターデータチェック(本文未収録エラー処理)

Call DBconnect(True) 'DB接続

strSQL = "SELECT * FROM 商品マスター WHERE 商品コード = '" & Me.ComboBox1 & "';"

adoRs.Open strSQL, adoCn 'SQLを実行して対象をRecordSetへ

Me.TextBox2 = adoRs!商品名

Me.TextBox6 = adoRs!製造場所

Me.TextBox7 = adoRs!定価

Me.TextBox8 = adoRs!原価

Call DBcut_off(True) 'DB切断

End If

End Sub

Private Sub ComboBox3_Change() '社員名が変更されたとき

If Me.ComboBox3 <> "" Then

Call MasterDataCheck2("社員マスター", "社員名", Me.ComboBox3) 'マスターデータチェック(本文未収録エラー処理)

Call DBconnect(True) 'DB接続

strSQL = _

"SELECT 営業所マスター.営業所 " & _

"FROM 社員マスター INNER JOIN 営業所マスター " & _

"ON 社員マスター.営業所コード = 営業所マスター.営業所コード " & _

"WHERE 社員マスター.社員コード = '" & Me.ComboBox3.Column(1) & "';"

adoRs.Open strSQL, adoCn 'SQLを実行して対象をRecordSetへ

Me.TextBox9 = adoRs!営業所

Call DBcut_off(True) 'DB切断

End If

End Sub

'------------ここから先は本文未収録のエラー処理プロシージャ------------

Private Sub ComboBox2_Change() 'コンボボックス2直接入力時のエラー回避

If Me.ComboBox2 <> "" Then Call MasterDataCheck2("取引先マスター", "取引先", Me.ComboBox2)

End Sub

Private Sub MasterDataCheck1() 'マスターデータがAccessに存在するかチェック

Dim chk_flg As Boolean

'商品マスターチェック

Call DBconnect(True)

adoRs.Open "SELECT * FROM 商品マスター;", adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True 'データがなかったらフラグを立てる

Call DBcut_off(True)

'取引先マスターチェック

Call DBconnect(True)

adoRs.Open "SELECT * FROM 取引先マスター;", adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True

Call DBcut_off(True)

'社員マスターチェック

Call DBconnect(True)

adoRs.Open "SELECT * FROM 社員マスター;", adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True

Call DBcut_off(True)

'営業所マスターチェック

Call DBconnect(True)

adoRs.Open "SELECT * FROM 営業所マスター;", adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True

Call DBcut_off(True)

If chk_flg = True Then

MsgBox "必要なマスターデータが登録されていません。" & vbCrLf & "動作を中止します。"

End

End If

End Sub

'指定のマスターデータがAccessに存在するかチェック(コンボボックス直接入力時のエラー回避)

Private Sub MasterDataCheck2(tbl As String, fld As String, key As String)

Dim chk_flg As Boolean

'指定マスターチェック

Call DBconnect(True)

strSQL = "SELECT * FROM " & tbl & " WHERE " & fld & " = '" & key & "';"

adoRs.Open strSQL, adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True

Call DBcut_off(True)

If chk_flg = True Then

MsgBox "コンボボックスに直接入力はできません。" & vbCrLf & "動作を中止します。"

End

End If

End Sub

Private Sub TranDataCheck() '販売データテーブルにレコードが存在するかチェック

Dim chk_flg As Boolean

'販売データチェック

Call DBconnect(True)

strSQL = "SELECT * FROM 販売データ WHERE 販売コード = " & ManagementForm.TextBox1 & ";"

adoRs.Open strSQL, adoCn

If adoRs.BOF = True And adoRs.EOF = True Then chk_flg = True 'データがなかったらフラグを立てる

Call DBcut_off(True)

If chk_flg = True Then

MsgBox "該当の販売データが存在しないため、" & vbCrLf & "この操作はできません。動作を中止します。"

End

End If

End Sub

Private Sub TextBox1_Change()

End Sub


★メインフォーム

Option Explicit

Private Sub CommandButton1_Click() '閉じるボタン

Me.Hide 'メインフォームを閉じる

End Sub

Private Sub CommandButton2_Click() '読込ボタン

Dim baff As String

Me.Hide 'メインフォームを閉じる

With SelectForm

With .ComboBox1

baff = .Value '前のデータを一時保管

.Clear 'リセット

.AddItem "以上"

.AddItem "以下"

.Value = baff '前のデータを入れる

End With

With .ComboBox2

baff = .Value '前のデータを一時保管

.Clear 'リセット

.AddItem "商品名"

.AddItem "製造場所"

.AddItem "取引先"

.AddItem "営業所"

.AddItem "社員名"

.Value = baff '前のデータを入れる

End With

.Show 'SelectForm表示

End With

End Sub

Private Sub CommandButton3_Click() '追加ボタン

Me.Hide 'メインフォームを閉じる

Call SetForm '販売管理フォームのクリアや値セット

With ManagementForm

.CommandButton2.Caption = "追加" '処理ボタンのCaptionを変更

.Show '表示

End With

End Sub

Private Sub CommandButton4_Click() '更新ボタン

Dim n As Long

n = ActiveCell.Row '選択されているセルの行を取得

If n = 1 Or Cells(n, 1) = "" Then '1行目、もしくは空セルだったら

MsgBox "対象データを選択してください。"

Exit Sub '終了

End If

Me.Hide 'メインフォームを閉じる

Call SetForm '販売管理フォームのクリアや値セット

Call FillForm(n) '販売管理フォームを埋める

With ManagementForm

.CommandButton2.Caption = "更新" '処理ボタンのCaptionを変更

.Show '表示

End With

End Sub

Private Sub CommandButton5_Click() '削除ボタン

Dim n As Long

n = ActiveCell.Row '選択されているセルの行を取得

If n = 1 Or Cells(n, 1) = "" Then '1行目、もしくは空セルだったら

MsgBox "対象データを選択してください。"

Exit Sub '終了

End If

Me.Hide 'メインフォームを閉じる

Call SetForm '販売管理フォームのクリアや値セット

Call FillForm(n) '販売管理フォームを埋める

With ManagementForm

.CommandButton2.Caption = "削除" '処理ボタンのCaptionを変更

.Show '表示

End With

End Sub

Private Sub SetForm() '販売管理フォームのクリアや値セット

Dim i As Long, cmb_item() As String

With ManagementForm

For i = 1 To 9 '1~9まで繰り返す

.Controls("TextBox" & i).Value = "" 'テキストボックスをクリア

Next i

For i = 1 To 3 '1~3まで繰り返す

.Controls("ComboBox" & i).Clear 'コンボボックスをクリア

Next i

'商品情報をComboBox1へ

Call DBconnect(True) 'DB接続

strSQL = "SELECT 商品コード FROM 商品マスター;"

adoRs.Open strSQL, adoCn 'SQLを実行して対象をRecordSetへ

Do Until adoRs.EOF 'レコードセットが終了するまで処理を繰り返す

.ComboBox1.AddItem adoRs!商品コード

adoRs.MoveNext '次のレコードに移動する

Loop

Call DBcut_off(True) 'DB切断

'取引先情報をComboBox2へ

Call DBconnect(True) 'DB接続

strSQL = "SELECT 取引先コード, 取引先 FROM 取引先マスター;"

adoRs.Open strSQL, adoCn, 1 'SQLを実行して対象をRecordSetへ(CursorType定数1=adOpenKeyset)

If Not (adoRs.BOF = True Or adoRs.EOF = True) Then 'データがあれば

ReDim cmb_item(adoRs.RecordCount - 1, 1) As String 'レコード数で配列を再定義

i = 0

Do Until adoRs.EOF 'レコードセットが終了するまで処理を繰り返す

cmb_item(i, 0) = adoRs!取引先 'i番目の配列の1列目

cmb_item(i, 1) = adoRs!取引先コード 'i番目の配列の2列目

i = i + 1

adoRs.MoveNext '次のレコードに移動する

Loop

.ComboBox2.List = cmb_item 'コンボボックス2へ配列を入れる

End If

Call DBcut_off(True) 'DB切断

'社員情報をComboBox3へ

Call DBconnect(True) 'DB接続

strSQL = "SELECT 社員コード, 社員名 FROM 社員マスター;"

adoRs.Open strSQL, adoCn, 1 'SQLを実行して対象をRecordSetへ(CursorType定数1=adOpenKeyset)

If Not (adoRs.BOF = True Or adoRs.EOF = True) Then 'データがあれば

ReDim cmb_item(adoRs.RecordCount - 1, 1) As String 'レコード数で配列を再定義

i = 0

Do Until adoRs.EOF 'レコードセットが終了するまで処理を繰り返す

cmb_item(i, 0) = adoRs!社員名 'i番目の配列の1列目

cmb_item(i, 1) = adoRs!社員コード 'i番目の配列の2列目

i = i + 1

adoRs.MoveNext '次のレコードに移動する

Loop

.ComboBox3.List = cmb_item 'コンボボックス3へ配列を入れる

End If

Call DBcut_off(True) 'DB切断

End With

End Sub

Private Sub FillForm(n As Long) '販売管理フォームを埋める

With ManagementForm

.TextBox1 = Cells(n, 1) '販売コード

.ComboBox1 = Cells(n, 2) '商品コード

.TextBox3 = Cells(n, 4) '売上日

.TextBox4 = Cells(n, 5) '数量

.TextBox5 = Cells(n, 6) '売価

.ComboBox2 = Cells(n, 10) '取引先

.ComboBox3 = Cells(n, 12) '社員名

End With

End Sub

Private Sub UserForm_Click()

End Sub

Sub SelectionReplaceTest()

Dim rSelection As Range '// 選択セル範囲

Dim r As Range '// 1セル

Dim sFind '// 検索文字列

Dim sFind2 '// 検索文字列

Dim sReplace '// 置換文字列

Dim f '// Formula値

Dim v '// Value値

sFind = "(1)"

sFind2 = "(2)"

sReplace = ""

Set rSelection = Range("B2:B10000") 'Selection

'// 選択セル範囲を1セルずつループ

For Each r In rSelection

f = r.Formula

v = r.Value

'// セルが数式の場合

If (Left(f, 1) = "=") And (f <> v) Then

'// 数式を置換

r.Formula = Replace(f, sFind, sReplace)

'// セルが数式でない場合

Else

'// Value値を置換

r.Value = Replace(v, sFind, sReplace)

' r.Value = Replace(v, sFind2, sReplace)

End If

Next

End Sub

Sub 配列の行列入れ替え()

Dim arr_1 As Variant

Dim arr_2 As Variant

Dim r1 As Long, r2 As Long

Dim c1 As Long, c2 As Long

Dim myR As Long

Dim sheetName As String

r1 = 2 '貼り付け行開始

r2 = 301 '貼り付け行終了

sheetName = ActiveSheet.Name

Range("A:H").ClearContents 'データを削除

Range("A1").Value = "lot"

Range("B1").Value = "1m"

Range("C1").Value = "1c"

Range("D1").Value = "1g"

Range("E1").Value = "2m"

Range("F1").Value = "2c"

Range("G1").Value = "2g"

arr_1 = Sheets("元1").Range("C3:KP3").Value

Sheets(sheetName).Range("A" & r1, "A" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元1").Range("C4:KP4").Value

Sheets(sheetName).Range("B" & r1, "B" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元1").Range("C5:KP5").Value

Sheets(sheetName).Range("C" & r1, "C" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元1").Range("C6:KP6").Value

Sheets(sheetName).Range("D" & r1, "D" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元2").Range("C4:KP4").Value

Sheets(sheetName).Range("E" & r1, "E" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元2").Range("C5:KP5").Value

Sheets(sheetName).Range("F" & r1, "F" & r2) = WorksheetFunction.Transpose(arr_1)

arr_1 = Sheets("元2").Range("C6:KP6").Value

Sheets(sheetName).Range("G" & r1, "G" & r2) = WorksheetFunction.Transpose(arr_1)

arr_2 = Array("東京都", "北海道", "愛知県")

' Range("B1").Value = arr_2(0)

Range("B2:D2").Value = arr_2

End Sub


Option Explicit

Private Sub CheckBox1_Click()

Dim rc As String

If CheckBox1.Value = True Then

rc = Me.Controls("CheckBox1").Caption

MsgBox rc & "チェックが付けられました!"

Unload MainForm

Else

MsgBox "チェックが外されました!"

End If

End Sub

Private Sub CheckBox2_Click()

Dim rc As String

If CheckBox1.Value = True Then

rc = Me.Controls("CheckBox2").Caption

MsgBox rc & "チェックが付けられました!"

Unload MainForm

Else

MsgBox "チェックが外されました!"

End If

End Sub

Private Sub CommandButton1_Click()

Call putCalenderDate(Me.TextBox1)

End Sub

Private Sub CommandButton2_Click()

Call putCalenderDate(Me.TextBox2)

End Sub

Private Sub CommandButton3_Click()

Dim OptionAry As Variant

Dim flg As Boolean

Dim i As Integer

'複数のオプションボタンを配列として格納

OptionAry = Array(OptionButton1, OptionButton2, OptionButton3)

'選択フラグの初期化

flg = False

'オプションボタンのチェック

For i = 0 To UBound(OptionAry)

If OptionAry(i).Value Then

'フラグに True を設定して、チェック処理を抜ける。

flg = True

Exit For

End If

Next

'チェック結果の表示

If flg Then

MsgBox "『" & OptionAry(i).Caption & "』が選択されました。"

If i = 0 Then MsgBox "0"

Unload MainForm

If i = 1 Then MsgBox "1"

Unload MainForm

If i = 2 Then MsgBox "2"

Unload MainForm

Else

MsgBox "項目が選択されていません。", vbExclamation

End If

'チェックボックステスト

' Dim c, buf As String

' Dim i As Long

' i = 0

' For Each c In Controls

' If Left(c.Name, 8) = "CheckBox" Then

' If c.Value Then buf = buf & c.Caption & vbCrLf

'

' End If

' Next c

' MsgBox buf & "が" & i & "個オンです"

MsgBox txtbx1

'期間フィルターテスト

' ActiveSheet.Range("A3").AutoFilter field:=1, Criteria1:=">=" & TextBox1.Value, Operator:=xlAnd, Criteria2:="<=" & TextBox2.Value

' Range("A3").CurrentRegion.Copy Sheets("転記").Range("A3")

' Range("A3").AutoFilter

' Call 期間フィルター

End Sub

フルパス ="=HYPERLINK(""" & LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1) & MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-1) & """)"

シート名 =RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))

ファイル名 =MID(CELL("filename",A2),FIND("[",CELL("filename",A2))+1,FIND("]",CELL("filename",A2))-(FIND("[",CELL("filename",A2))+1))


Sub 横縦TEST()

Dim r As Long, c As Long, c2 As Long

Dim myR As Long

Range("P:S").ClearContents

'F:G列のデータを削除

Range("P1").Value = "lot"

Range("Q1").Value = "m"

Range("R1").Value = "c"

Range("S1").Value = "g"

'F1,G1に見出しを設定

' myR = 1

'見出し行が3行目(4行目からデータを配置)

r = 3

For c2 = 16 To 19

myR = 1

'見出し行

'2行目から最終行までループ

For c = 3 To 6

'行方向のループの中で、列方向に6列目(F列)までループ

' If Cells(r, c).Value <> "" Then

' 'r行,c列 のセルの値が "" でない時

myR = myR + 1 '書き出す行を一つ下に

Cells(myR, c2).Value = Cells(r, c).Value

' End If

Next c

r = r + 1

Next c2

End Sub


Option Explicit

Private Sub CommandButton1_Click()

Call putCalenderDate(Me.TextBox1)

End Sub

Private Sub CommandButton2_Click()

Call putCalenderDate(Me.TextBox2)

End Sub

Private Sub CommandButton3_Click()

ActiveSheet.Range("A3").AutoFilter field:=1, Criteria1:=">=" & TextBox1.Value, Operator:=xlAnd, Criteria2:="<=" & TextBox2.Value

Range("A3").CurrentRegion.Copy Sheets("転記").Range("A3")

Range("A3").AutoFilter

' Call 期間フィルター

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub UserForm_Click()

End Sub


★カレンダーフォーム

https://ateitexe.com/excel-vba-calendar-control/

Sub マップから管理へ()

Dim c As Range

Dim cd As String

Dim objWbk As Workbook

Dim sh1 As Worksheet

Dim sh2 As Worksheet

Set Wbk = ThisWorkbook

Set sh1 = Worksheets("マップ")

Set sh2 = Worksheets("管理")

Set c = ActiveCell

cd = Application.InputBox(Prompt:="管理番号入力")

If cd = "False" Then Exit Sub

sh2.Select

'検索範囲のセル(Range)を指定する

Dim SearchArea As Range

Set SearchArea = Range(Cells(1, 1), Cells(100, 1)) '(=A1:A100)

'指定の検索範囲を検索する

Dim result As Range

Set result = SearchArea.Find(what:=cd, LookAt:=xlWhole)

'①検索範囲にcdが見つからなかった場合

If result Is Nothing Then

MsgBox cd & "は見つかりませんでした。登録してください。"

sh1.Select

End If

'②検索範囲にcdが見つかった場合

If result Is Nothing = False Then

MsgBox cd & "が見つかりました。場所の転記します。"

'その行の値を取得し隣に場所を選択した場所を表記 更新日時

result.Offset(0, 5).Value = c

result.Offset(0, 6).Value = Format(Now, "yyyy/mm/dd hh:mm")

End If

End Sub

http://www.orangemaker.sakura.ne.jp/product/Kokomite/

★Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Row < 2 Then Exit Sub '〇行未満だと終了

Cancel = True 'ダブルクリックしてセルが編集状態となっているのを解除するために使用

Dim targ As String 'Wクリックセル値

Dim kanri As String '管理番号値

If Target.Cells(1).Value = "" Then Exit Sub '結合セル用

' If Target.Value = "" Then Exit Sub '単セル用

targ = Target.Cells(1).Value

kanri = Application.InputBox(Prompt:="場所『" & targ & "』の管理番号を入力してください")

If kanri = "False" Then Exit Sub

Range("Z1") = Target.Value

Range("AA1") = kanri

End Sub

★エクセルマクロVBAで大量データを比較・照合してマッチングする方法

★Sub myFunc管理物をプロットする()

’フロアレイアウトの 作成と連動方法

Dim ws As Worksheet, bContinue As Boolean

Dim sLocation As String

Dim rRow As Range

Dim myRowNo As Long

bContinue = True

sLocation = ""

Set rRow = Nothing

myRowNo = ActiveCell.Row 'カレント行を保存する。

If ActiveSheet.Name = "管理" Then

Else

bContinue = False

End If

If bContinue Then

bContinue = False

For Each ws In Worksheets

If ws.Name = "マップ" Then

bContinue = True

Exit For

End If

Next ws

If bContinue = False Then

Debug.Print "E:「マップ」シートが見つからない。"

End If

End If

If bContinue Then 'ロケーション日本語名を取得する

Dim nRow As Long, nCol As Long

Set rRow = Cells.Find(what:="場所", _

LookIn:=xlValues, _

lookat:=xlWhole)

If rRow Is Nothing Then

bContinue = False

Debug.Print "E:「場所」列が見つからない。"

Else

sLocation = ""

sLocation = Cells(myRowNo, rRow.Column).Value

If sLocation = "" Then bContinue = False

End If

End If

If bContinue Then 'シートを切替える

On Error Resume Next

Worksheets("マップ").Activate

End If

If bContinue Then 'ロケーションを探す

Set rRow = Cells.Find(what:=sLocation, _

LookIn:=xlValues, _

lookat:=xlWhole)

If rRow Is Nothing Then

Debug.Print "E:「" & sLocation & "」セルが見つからない。"

Else

Range("B2", "CK501").Interior.Color = RGB(255, 255, 255)

rRow.Select 'カーソルを位置づける

rRow.Interior.Color = RGB(255, 0, 0)

End If

End If

End Sub

次のVBA①はセルとセルをWクリックで選択し直線を引くサンプルです。②のVBAは選択した直線を消去するサンプルです。

①セルWクリックで直線を引く。望みのWorkSheetのイベントにして下さい。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim MyRange As String

Dim L_Weight As Single, L_styl As String

Dim XB As Single, YB As Single, XE As Single, YE As Single

MyRange = "B2:BS42" '''作図範囲指定実情に合わせ変更する事'''

''MyRange指定域以外は作図しない。

If Intersect(Target, Range(MyRange)) Is Nothing Then Exit Sub

Static cellB As Range '開始cell

Cancel = True

If cellB Is Nothing Then

Set cellB = Target

Else

If Target.Address = cellB.Address Then

Set cellB = Nothing

Exit Sub

End If

With cellB

XB = .Left

YB = .Top + .Height / 2

End With

With Target

XE = .Left

YE = .Top + .Height / 2

End With

ActiveSheet.Shapes.AddLine(XB, YB, XE, YE).Select

Selection.OnAction = "shape消去"

With Selection.ShapeRange.Line

.Weight = 0.75

.DashStyle = msoLineSolid

' .BeginArrowheadStyle = msoArrowheadTriangle '始まり矢印

' .EndArrowheadStyle = msoArrowheadTriangle '終わり矢印

End With

Range(cellB.Address).Select

Set cellB = Nothing

End If

End Sub

②直線消去。標準モジュールに作成します。これは上のコード中に

Selection.OnAction = "shape消去" で呼び出しています。

Sub shape消去()

'------------------------------------------------------

'直線をクリックすることで消去させるコード

Dim x As Variant

x = Application.Caller

If VarType(x) <> 8 Then Exit Sub

ActiveSheet.Shapes(x).Delete

End Sub

背景壁紙の場所

C:\Windows\Web\Wallpaper

ロック画面のありか(隠しフォルダ)

%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets

Xperia壁紙

http://butsu-yoku.net/wp-content/themes/butsuyoku-style/bigfile/xperia_Z_wpp_01.jpg

Sub 引き当て参照()

    Dim myStr As String, myRng As Range
    Dim FoundCell As Range, FirstCell As Range
    Dim k As Long
    Dim rc As Integer
    myStr = Selection.Value
    rc = MsgBox(myStr & "の処理を行いますか?", vbYesNo + vbQuestion, "確認")
    If rc = vbYes Then
        MsgBox "処理を行います"
    Else
        MsgBox "処理を中断します"
        Exit Sub
    End If
    If Dir("C:\Users\hiro\Desktop\製造仕様書\PLM-0203\引き当て.xlsx") <> "" Then
        Workbooks.Open "C:\Users\hiro\Desktop\製造仕様書\PLM-0203\引き当て.xlsx"
        ' myStr = Application.InputBox("検索文字を入力")
      For k = 1 To Worksheets.Count
        With Worksheets(k)
          .Activate
          .Range("A1").Select
          Set FoundCell = .Cells.Find(what:=myStr, LookIn:=xlValues, lookat:=xlPart)
            If Not FoundCell Is Nothing Then
              Set myRng = FoundCell
              Set FirstCell = FoundCell
                Do
                  Set FoundCell = .Cells.FindNext(after:=FoundCell)
                    If FoundCell.Address = FirstCell.Address Then Exit Do
                  Set myRng = Union(myRng, FoundCell)
                Loop
              myRng.Select
                  rc = MsgBox(myRng & "が見つかりました。検索続けますか?", vbYesNo + vbQuestion, "確認")
                    If rc = vbYes Then
                        MsgBox "続けます"
                     Else
                        MsgBox "処理を中断します"
                        Exit Sub
                    End If
            End If
        End With
          Set myRng = Nothing
      Next k
    Else
        MsgBox "ファイルが存在しません。", vbExclamation
    End If
End Sub
Sub 文字列検索()
    Dim FoundCell As Range, FirstCell As Range, Target As Range
    Set FoundCell = Cells.Find(what:=key)
    If FoundCell Is Nothing Then
        MsgBox "見つかりません"
        Exit Sub
    Else
        Set FirstCell = FoundCell
        Set Target = FoundCell
    End If
    Do
        Set FoundCell = Cells.FindNext(FoundCell)
        If FoundCell.Address = FirstCell.Address Then
            Exit Do
        Else
            Set Target = Union(Target, FoundCell)
        End If
    Loop
    Target.Select
    MsgBox Target.Count & "件見つかりました"
End Sub
Sub 文字列検索②()
    Dim myStr As String, myRng As Range
    Dim FoundCell As Range, FirstCell As Range
    Dim k As Long
    Dim rc As Integer
' myStr = Application.InputBox("検索文字を入力")
      For k = 1 To Worksheets.Count
        With Worksheets(k)
          .Activate
          .Range("A1").Select
          Set FoundCell = .Cells.Find(what:=myStr, LookIn:=xlValues, lookat:=xlPart)
            If Not FoundCell Is Nothing Then
              Set myRng = FoundCell
              Set FirstCell = FoundCell
                Do
                  Set FoundCell = .Cells.FindNext(after:=FoundCell)
                    If FoundCell.Address = FirstCell.Address Then Exit Do
                  Set myRng = Union(myRng, FoundCell)
                Loop
              myRng.Select
                  rc = MsgBox(myRng & "が見つかりました。検索続けますか?", vbYesNo + vbQuestion, "確認")
                    If rc = vbYes Then
                        MsgBox "続けます"
                     Else
                        MsgBox "処理を中断します"
                        Exit Sub
                    End If
            End If
        End With
          Set myRng = Nothing
      Next k
End Sub

Sub 選択列の書き換え()

    Dim r As Long
    Dim i As Long
    Dim intTopCol As Integer
    intTopCol = Selection.Column '選択先頭列
    r = getLastRow(ActiveSheet) '最終行 Function
  MsgBox intTopCol & "列目選択" & "最終行" & r & "行です。処理しますか?", vbOKCancel
Application.ScreenUpdating = False
        For i = 3 To r
        If Cells(i, intTopCol) = "" Then
        Cells(i, intTopCol) = "未"
        Else
        Cells(i, intTopCol) = Cells(i, intTopCol)
        End If
        If Cells(i, intTopCol) = "" Then
        Cells(i, 27) = Cells(i - 1, 27)
        Cells(i, 27).Select
        Selection.Copy
        Cells(i, intTopCol).Select
        Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Else
        Cells(i, 27) = Cells(i, intTopCol)
' Cells(i, 4).Font.Color = vbRed
        End If
    Next
    Cells(3, 1).Select
Application.ScreenUpdating = True
End Sub
Function getLastRow(WS As Worksheet, Optional CheckCol As Long = 1) As Long
  getLastRow = WS.Cells(WS.Cells.Rows.Count, CheckCol).End(xlUp).Row
End Function



http://wallpapersmp.com/image/2015/11/ab9a4ca5f30af9e8afe758c4de3108e4.jpg

Option Explicit

Sub 保存()

Dim xSheet As Worksheet

Dim myFile As String

Dim myName As String

Set xSheet = ActiveSheet

ThisWorkbook.Worksheets(3).Copy

'myName = ActiveWorkbook.Worksheets(1).Name

'myFile = ThisWorkbook.Path & "\" & myName & ".xls"

myFile = ThisWorkbook.Path & "\" & xSheet.Range("A1").Value & ".xls"

'A1セルに =TODAY()

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs Filename:=myFile

Application.DisplayAlerts = True

ActiveWorkbook.Close

End Sub

Sub 特定シートだけ別のフォルダに保存()

'シートの複製(複製すると新しいブックが立ち上がります)

Sheets("Sheet1").Copy '名前を付け、ファイル形式も決めて特定の場所に保存する。

ActiveWorkbook.SaveAs _

Filename:="C:\Users\user\Documents\保存ファイル", _

FileFormat:=xlOpenXMLWorkbook

End Sub




Sub ロット作成PLM()

Dim rc As Integer

If Range("C2").Value = 0 Or Range("C2").Value = 1 Or Range("C2").Value = 2 Or Range("C2").Value = 3 Then

rc = MsgBox("PLM-01ロット" & vbCrLf & Range("A2") & "年" & Range("B2") & "月" & Range("C2") & Range("D2") & "日用ですか?", vbYesNo)

If rc = vbYes Then

Call ロット作成PLM01

End If

ElseIf Range("C2").Value = 4 Or Range("C2").Value = 5 Or Range("C2").Value = 6 Or Range("C2").Value = 7 Then

rc = MsgBox("PLM-02ロット" & vbCrLf & Range("A2") & "年" & Range("B2") & "月" & Range("C2") - 4 & Range("D2") & "日用ですか?", vbYesNo)

If rc = vbYes Then

Call ロット作成PLM02

End If

ElseIf Range("C2").Value = 8 Or Range("C2").Value = 9 Or Range("C2").Value = 10 Or Range("C2").Value = 11 Then

rc = MsgBox("PLM-03ロット" & vbCrLf & Range("A2") & "年" & Range("B2") & "月" & Range("C2") - 8 & Range("D2") & "日用ですか?", vbYesNo)

If rc = vbYes Then

Call ロット作成PLM03

End If

Else

MsgBox "不明なデータです。"

End If

End Sub

Sub ロット作成PLM01()

Dim y As String

Dim y1 As Long

Dim m As String

Dim m1 As Long

Dim dl As String

Dim dl1 As Long

Dim dr As String

Dim dr1 As Long

Dim n As String

Dim n1 As Long

Dim i As Long

For i = 2 To 300

y1 = Range("A" & i).Value

m1 = Range("B" & i).Value

dl1 = Range("C" & i).Value

dr1 = Range("D" & i).Value

n1 = Range("E" & i).Value

If n1 > 32 Then

dr1 = dr1 + 1

n1 = 0

ElseIf dr1 > 9 Then

dl1 = dl1 + 1

Range("C" & i).Value = dl1

dr1 = 0

Range("D" & i).Value = dr1

If dl1 > 3 Then

m1 = m1 + 1

Range("B" & i).Value = m1

dl1 = 0

Range("C" & i).Value = dl1

dr1 = 1

Range("D" & i).Value = dr1

If m1 > 12 Then

y1 = y1 + 1

Range("A" & i).Value = y1

m1 = 1

Range("B" & i).Value = m1

End If

End If

End If

Range("E" & i + 1).Value = n1 + 1

Range("D" & i + 1).Value = dr1

Range("C" & i + 1).Value = dl1

Range("B" & i + 1).Value = m1

Range("A" & i + 1).Value = y1

Next i

End Sub

Sub ロット作成PLM02()

Dim y As String

Dim y1 As Long

Dim m As String

Dim m1 As Long

Dim dl As String

Dim dl1 As Long

Dim dr As String

Dim dr1 As Long

Dim n As String

Dim n1 As Long

Dim i As Long

For i = 2 To 300

y1 = Range("A" & i).Value

m1 = Range("B" & i).Value

dl1 = Range("C" & i).Value

dr1 = Range("D" & i).Value

n1 = Range("E" & i).Value

If n1 > 32 Then

dr1 = dr1 + 1

n1 = 0

ElseIf dr1 > 9 Then

dl1 = dl1 + 1

Range("C" & i).Value = dl1

dr1 = 0

Range("D" & i).Value = dr1

If dl1 > 7 Then

m1 = m1 + 1

Range("B" & i).Value = m1

dl1 = 4

Range("C" & i).Value = dl1

dr1 = 1

Range("D" & i).Value = dr1

If m1 > 12 Then

y1 = y1 + 1

Range("A" & i).Value = y1

m1 = 1

Range("B" & i).Value = m1

End If

End If

End If

Range("E" & i + 1).Value = n1 + 1

Range("D" & i + 1).Value = dr1

Range("C" & i + 1).Value = dl1

Range("B" & i + 1).Value = m1

Range("A" & i + 1).Value = y1

Next i

End Sub

Sub ロット作成PLM03()

Dim y As String

Dim y1 As Long

Dim m As String

Dim m1 As Long

Dim dl As String

Dim dl1 As Long

Dim dr As String

Dim dr1 As Long

Dim n As String

Dim n1 As Long

Dim i As Long

For i = 2 To 300

y1 = Range("A" & i).Value

m1 = Range("B" & i).Value

dl1 = Range("C" & i).Value

dr1 = Range("D" & i).Value

n1 = Range("E" & i).Value

If n1 > 32 Then

dr1 = dr1 + 1

n1 = 0

ElseIf dr1 > 9 Then

dl1 = dl1 + 1

Range("C" & i).Value = dl1

dr1 = 0

Range("D" & i).Value = dr1

If dl1 > 11 Then

m1 = m1 + 1

Range("B" & i).Value = m1

dl1 = 8

Range("C" & i).Value = dl1

dr1 = 1

Range("D" & i).Value = dr1

If m1 > 12 Then

y1 = y1 + 1

Range("A" & i).Value = y1

m1 = 1

Range("B" & i).Value = m1

End If

End If

End If

Range("E" & i + 1).Value = n1 + 1

Range("D" & i + 1).Value = dr1

Range("C" & i + 1).Value = dl1

Range("B" & i + 1).Value = m1

Range("A" & i + 1).Value = y1

Next i

End Sub

Sub test1()
'Dim sheet1 As Worksheet
'Dim sheet2 As Worksheet
Dim rng11 As Range 'コピー元用range
Dim rng21 As Range 'コピー先用range
Dim rng12 As Range 'コピー元用range
Dim rng22 As Range 'コピー先用range
Dim rng13 As Range 'コピー元用range
Dim rng23 As Range 'コピー先用range
Dim rng15 As Range 'コピー元用range
Dim rng25 As Range 'コピー先用range
Dim kwd1 As String '検索文字列用
Dim kwd2 As String '検索文字列用
Dim kwd3 As String '検索文字列用
Dim kwd5 As String '検索文字列用
    For i = 2 To 300
        kwd1 = Range("A" & i).Value '検索文字列
        kwd2 = Range("B" & i).Value '検索文字列
        kwd3 = Range("C" & i).Value '検索文字列
        kwd5 = Range("E" & i).Value '検索文字列
Set rng11 = Range("AA:AA").Find(kwd1, LookAt:=xlWhole) 'kwd1
        If rng11 Is Nothing Then
            MsgBox "年データ無いよ" 'エラーメッセージ
            Exit Sub '終わり
        End If
Set rng11 = rng11.Offset(0, 1) '見つけたセルの右隣のセル
'コピー先設定
Set rng21 = Range("A" & i)
'コピー実行
        rng11.Copy rng21 '横3セルをコピー(書式付)
        rng21.Value = rng11.Value '横3セルをコピー(値のみ)
        
Set rng12 = Range("AC:AC").Find(kwd2, LookAt:=xlWhole) 'kwd2
        If rng12 Is Nothing Then
            MsgBox "月データ無いよ" 'エラーメッセージ
            Exit Sub '終わり
        End If
Set rng12 = rng12.Offset(0, 1) '見つけたセルの右隣のセル
'コピー先設定
Set rng22 = Range("B" & i)
'コピー実行
        rng12.Copy rng22 '横3セルをコピー(書式付)
        rng22.Value = rng12.Value '横3セルをコピー(値のみ)
        
Set rng13 = Range("AE:AE").Find(kwd3, LookAt:=xlWhole) 'kwd3
        If rng13 Is Nothing Then
            MsgBox "日付(十の位)無いよ" 'エラーメッセージ
            Exit Sub '終わり
        End If
Set rng13 = rng13.Offset(0, 1) '見つけたセルの右隣のセル
'コピー先設定
Set rng23 = Range("C" & i)
'コピー実行
        rng13.Copy rng23 '横3セルをコピー(書式付)
        rng23.Value = rng13.Value '横3セルをコピー(値のみ)
        
Set rng15 = Range("AH:AH").Find(kwd5, LookAt:=xlWhole) 'kwd5
        If rng15 Is Nothing Then
            MsgBox "本数データ無いよ" 'エラーメッセージ
            Exit Sub '終わり
        End If
Set rng15 = rng15.Offset(0, 1) '見つけたセルの右隣のセル
'コピー先設定
Set rng25 = Range("E" & i)
'コピー実行
        rng15.Copy rng25 '横3セルをコピー(書式付)
        rng25.Value = rng15.Value '横3セルをコピー(値のみ)
        
            Range("F" & i).Value = "A"
            Range("H" & i).Value = i - 1 & "本"
            Range("i" & i).Value = Range("A" & i).Value & Range("B" & i).Value & Range("C" & i).Value & Range("D" & i).Value & Range("E" & i).Value & Range("F" & i).Value
    Next i
End Sub

Sub 配列使用し検索貼付()

Dim start As Date: start = Time '★処理時間計測開始

Dim rw As Long 'Variant

'=MATCH(検査値,検査範囲,照合の種類)

Dim rng As Range

Dim sheet1 As Worksheet

Dim sheet2 As Worksheet

Dim a As Variant

Dim b As Variant

Dim i As Long

Dim r As Long

Dim ar1 As Variant

Dim ar2 As Variant

Dim LASTROW As Long

Set sheet1 = Sheets("全機") '元シートデータ

Set sheet2 = Sheets("抽出") '転記先シート

Application.ScreenUpdating = False '★描写停止

Application.EnableEvents = False '★イベント停止

'Application.Calculation = xlCalculationManual '★自動計算手動

' 最終行の取得

LASTROW = Cells(Rows.Count, 1).End(xlUp).Row

MsgBox LASTROW & " 行目が最終行です。"

i = 2 '見出し行を除く

sheet1.Select '元シートデータ

'仕様書番号

ar1 = WorksheetFunction.Transpose(sheet1.Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)).Value)

'機械名

ar2 = WorksheetFunction.Transpose(sheet1.Range(Range("B1"), Cells(Rows.Count, 2).End(xlUp)).Value)

For i = LBound(ar1) To UBound(ar1)

ar1(i) = ar1(i) & "," & ar2(i)

Next i

For r = 2 To LASTROW '見出し行を除く~最終行まで

sheet2.Select '転記先シート

a = sheet2.Range("C" & r).Value '仕様書番号

b = sheet2.Range("A" & r).Value '機械名

rw = WorksheetFunction.Match(a & "," & b, ar1, 0) '関数 MATCH(検査値,検査範囲,照合の種類)

' MsgBox rw

If IsNumeric(rw) Then

' MsgBox rw & "番めのデータです"

Set rng = sheet1.Range("A" & rw)

sheet2.Range("E" & r).Resize(1, 5).Value = rng.Resize(1, 5).Value

' Worksheets("抽出").Range("E" & r, "G" & r) = Worksheets("全機").Range("A" & rw, "D" & rw)

Else

MsgBox "該当データが見つかりません", vbExclamation

End If

Next r

'Application.Calculation = xlCalculationAutomatic '★自動計算再開

Application.ScreenUpdating = True '★イベント再開

Application.EnableEvents = True '★描写再開

Dim finish As Date: finish = Time '★処理時間計測終了

MsgBox "処理時間 " & Format(finish - start, "nn分ss秒") & " 。", vbInformation + vbOKOnly '★処理時間表示

End Sub


'// オートフィルタ解除関数

Sub AutoFilterOff()

'// オートフィルタが解除されている場合

If (ActiveSheet.AutoFilterMode = False) Then

Exit Sub

End If

ActiveSheet.Range("A1").AutoFilter

End Sub


Sub 複数列複数文字列AF()

Dim ListArray1(2) As String

Dim ListArray2(2) As String

Dim MaxRow As Long

ListArray1(0) = "田中"

ListArray1(1) = "店舗C"

ListArray1(2) = "店舗D"

ListArray2(0) = "メーカーA"

ListArray2(1) = "メーカーB"

ListArray2(2) = "メーカーC"

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

With Range(Cells(1, 1), Cells(MaxRow, 4))

.AutoFilter Field:=1, _

Criteria1:=ListArray1, _

Operator:=xlFilterValues

.AutoFilter Field:=3, _

Criteria1:=ListArray2, _

Operator:=xlFilterValues

End With

Call SetPartColorTest

Call AutoFilterOff

End Sub


フォルダ内の各ブック指定の場所からのデータ取得

Sub フォルダ内データ取得2()

Dim r As Long

Dim strDir As String

Dim strFile As String

Dim xls As New Excel.Application

Dim wb As Workbook

Dim ws As Worksheet

Dim StartTime, StopTime As Variant

'〇行から下のdelete

Rows("5:5").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Delete Shift:=xlUp

MsgBox "※処理時間 300ファイルでおよそ1分"

StartTime = Time 'ここから実行時間のカウントを開始

' Debug.Print Timer 'イミディエイト画面へ時間を表示

Application.ScreenUpdating = False '描写を止める

strDir = ThisWorkbook.path & "\" 'このブックがある対象フォルダアドレス

strFile = Dir(strDir) '対象フォルダ内のファイルを変数へ

r = 5

Do While strFile <> "" '条件式を満たすまで繰り返す処理

Set wb = xls.Workbooks.Open(strDir & strFile)

Set ws = wb.Worksheets("Sheet1") '対象シート名

'ハイパーリンク設定

ActiveSheet.Hyperlinks.Add Anchor:=Cells(r, 1), Address:=strFile

'取得データ貼り付け

Range(Cells(r, 2), Cells(r, 11)).Value = ws.Range(ws.Cells(1, 1), ws.Cells(1, 10)).Value

wb.Close Savechanges:=False

strFile = Dir()

r = r + 1 '行+1行

Loop

Set xls = Nothing

Application.ScreenUpdating = True '描写を開始

' Debug.Print Timer 'イミディエイト画面へ時間を表示

StopTime = Time 'ここで実行時間のカウントを終了

StopTime = StopTime - StartTime

MsgBox "処理時間" & Minute(StopTime) & "分" & _

Second(StopTime) & "秒 "

End Sub

スクショをトリミングして貼り付け

Option Explicit

' キャプチャ収集状態なら True

Private isLogging As Boolean

' キャプチャを貼り付けるブック名を保持する

Private fileName As String

' キャプチャを取得する

Private Sub Capture()

On Error GoTo errorHandler

' クリップボードに画像が格納されていたら貼り付ける

If Application.ClipboardFormats(1) = xlClipboardFormatBitmap Then

Dim rows As Integer: rows = 27 ' 行数(元54)

Dim cols As Integer: cols = 36 ' 列数(元72)

' キャプチャを貼り付けるブックを選択する

Workbooks(fileName).Activate

' 選択しているセルを基準セルとして取得する

Dim baseCell As Variant

Set baseCell = Selection

' 下線を引く

Range(baseCell.Offset(rows, 1), baseCell.Offset(rows, cols + 1)).Select

With Selection.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.Weight = xlThin

End With

' 見出し用の記号をセットする

baseCell.Offset(1, 1).Value = "■"

' キャプチャ取得日時をセットする

With baseCell.Offset(1, cols - 5)

.HorizontalAlignment = xlRight

.Value = "取得日時:" & Now

End With

' クリップボードのデータを貼り付け、行数に合わせて縮小する

baseCell.Offset(2, 2).Select

ActiveSheet.Paste

With Selection.ShapeRange

.PictureFormat.CropTop = 100 '上の切り取り

.PictureFormat.CropBottom = 368 '下の切り取り

.PictureFormat.CropRight = 600 '右の切り取り

.PictureFormat.CropLeft = 20 '左の切り取り

.LockAspectRatio = msoTrue

.Height = .Height * 0.7

End With

' 次の画像を貼るために基準セルを移動し、クリップボードに現在のセルの値をコピーする (先頭を Bitmap でなくすため)

With baseCell.Offset(rows + 1, 0)

.Select

.Copy

End With

' 切り取り・コピーモードを解除する

Application.CutCopyMode = False

' 改ページ設定をする

ActiveSheet.HPageBreaks.Add Before:=ActiveCell

End If

' 1秒間隔で再実行するようタイマーをセットする

Application.OnTime Now + TimeValue("00:00:01"), "Capture", , isLogging

Exit Sub

errorHandler:

isLogging = False

End Sub

' キャプチャを開始する

Sub StartCapture()

MsgBox "キャプチャの取得を開始します。終了時は Esc キーを押下してください。"

Range("A1").Select

' Esc キーで停止できるようにしておく

Application.OnKey "{ESC}", "StopCapture"

' キャプチャを貼り付けるブック名を取得する

fileName = ActiveWorkbook.Name

' キャプチャ取得状態を設定する

isLogging = True

' キャプチャの取得を開始する

Capture

End Sub

' キャプチャを終了する

Sub StopCapture()

If isLogging = True Then

' キャプチャの取得状態を解除する

isLogging = False

' Esc キーへの登録を解除する

Application.OnKey "{ESC}", ""

MsgBox "キャプチャの取得を停止しました。"

End If

End Sub