■
/// <summary> /// 指定したビットフラグが立っているか /// </summary> /// <param name="binaryData"></param> /// <param name="location"></param> /// <returns></returns> public static bool GetBitFlg(byte binaryData, int location) { string result = Convert.ToString(Convert.ToInt32(binaryData), 2).PadLeft(8, '0'); return result.Substring(result.Length - location, 1) == "1" ? true : false; }
■
XE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = XE) ) ) metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=XE;USER ID=/" metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=XE;DBA PRIVILEGE=SYSDBA;USER ID=/"
■
'シートのデータを複数シートに反映 Private Sub 共通() Dim common_s As Worksheet Dim common_data As Variant Dim loop_colCnt As Integer Dim table_names As Object Dim loop_rowCnt As Integer Dim write_s As Worksheet Dim write_colData As Variant Dim loop_wCnt As Integer Dim loop_outCnt As Long Dim out_data() As String Set table_names = CreateObject("Scripting.Dictionary") Set common_s = ThisWorkbook.Sheets("共通") '★ common_data = common_s.Range("D7:G9") common_data = common_data '列部分取得 For loop_colCnt = LBound(common_data, 2) To UBound(common_data, 2) If common_data(1, loop_colCnt) <> "" Then table_names.Add loop_colCnt, common_data(1, loop_colCnt) End If Next loop_colCnt 'メイン処理 For loop_rowCnt = 2 To UBound(common_data) For loop_colCnt = 3 To UBound(common_data, 2) If common_data(loop_rowCnt, loop_colCnt) = "〇" Then Set write_s = ThisWorkbook.Worksheets(table_names(loop_colCnt)) '★列数を取得、格納 write_colData = write_s.Range("A2:B2") For loop_wCnt = LBound(write_colData, 2) To UBound(write_colData, 2) '列名を比較 If write_colData(1, loop_wCnt) = common_data(loop_rowCnt, 1) Then '★行数分一括でデータセット For loop_outCnt = 0 To 0 ReDim Preserve out_data(loop_outCnt) As String '値を取得 out_data(loop_outCnt) = common_data(loop_rowCnt, 2) Next '★ write_s.Range(write_s.Cells(3, loop_wCnt).Address & ":" & write_s.Cells(3, loop_wCnt).Address) = out_data End If Next End If Next loop_colCnt Next loop_rowCnt End Sub
■
=MID(E7,LEN("系統コード=[")+1,FIND("].往復区分=[",E7,1)-LEN("系統コード=[")-1) =MID(E7,FIND("].往復区分=[",E7,1)+LEN("].往復区分=["),(FIND("].平日区分=[",E7,1)-(FIND("].往復区分=[",E7,1)+LEN("].往復区分=[")))) =MID(E7,FIND("].平日区分=[",E7,1)+LEN("].平日区分=["),(LEN(E7)-(FIND("].平日区分=[",E7,1)+LEN("].平日区分=["))))
■
Option Explicit 'データのフォーマットチェック用 Public Enum CheckFormatPattern Character Time Date Numbers NumHanToZen NumZenToHan End Enum '処理機能毎のパターン Public Type ShoriPattern title As String '列名称 Required As Boolean '必須 Digits As Integer '桁数 checkFormat() As CheckFormatPattern 'フォーマットチェック Grant As Boolean '付与(コーテーションを付けるか) OutputFormat As String '出力時フォーマット End Type '処理機能毎のパターンデータ Public Type ShoriDataInfo ColumnsCount As Integer pattern() As ShoriPattern End Type Public Enum aaaCellInfo Number '連番 PhoneNumber '電話番号 UnkoDate '運行日付 End Enum Sub Sample2() Dim buf As String Dim colInfo As ShoriDataInfo Dim testData As Variant Dim colCount As Integer Dim fmtCount As Integer testData = Array("1", "09012345678", "11:33") colInfo = GetShoriDataInfo("aaa") 'check For colCount = 0 To colInfo.ColumnsCount 'データが空文字かチェック If testData(colCount) = "" Then If colInfo.pattern(colCount).Required = True Then '★エラーメッセージ GoTo Continue Else '必須出ない場合でも、以降の判定処理は行わない GoTo Continue End If End If '★不要なダブルコーテーション、シングルコーテーション、空白を削除 '桁数チェック If LenB(StrConv(testData(colCount), vbFromUnicode)) > colInfo.pattern(colCount).Digits Then '★エラーメッセージ GoTo Continue End If 'フォーマットチェック For fmtCount = 0 To UBound(colInfo.pattern(colCount).checkFormat) Call checkFormat(CStr(testData(colCount)), colInfo.pattern(colCount), fmtCount) Next Continue: Next ' Open ThisWorkbook.Path & "\Sample.csv" For Input As #1 ' Do Until EOF(1) ' Line Input #1, buf ' ''読み込んだデータをセルに代入する ' Loop ' Close #1 End Sub Public Function GetShoriDataInfo(shoriName As String) As ShoriDataInfo Dim name As String Dim shoriInfo As ShoriDataInfo Dim colCount As Integer Select Case shoriName Case "aaa" ReDim Preserve shoriInfo.pattern(colCount) As ShoriPattern shoriInfo.pattern(colCount).title = "連番" shoriInfo.pattern(colCount).Required = True shoriInfo.pattern(colCount).Digits = 10 ReDim Preserve shoriInfo.pattern(colCount).checkFormat(0) As CheckFormatPattern shoriInfo.pattern(colCount).checkFormat(0) = CheckFormatPattern.NumZenToHan ReDim Preserve shoriInfo.pattern(colCount).checkFormat(1) As CheckFormatPattern shoriInfo.pattern(colCount).checkFormat(1) = CheckFormatPattern.Numbers shoriInfo.pattern(colCount).Grant = False shoriInfo.pattern(colCount).OutputFormat = "" colCount = colCount + 1 ReDim Preserve shoriInfo.pattern(colCount) As ShoriPattern shoriInfo.pattern(colCount).title = "電話番号" shoriInfo.pattern(colCount).Required = False shoriInfo.pattern(colCount).Digits = 11 ReDim Preserve shoriInfo.pattern(colCount).checkFormat(0) As CheckFormatPattern shoriInfo.pattern(colCount).checkFormat(0) = CheckFormatPattern.Numbers shoriInfo.pattern(colCount).Grant = False shoriInfo.pattern(colCount).OutputFormat = "" colCount = colCount + 1 ReDim Preserve shoriInfo.pattern(colCount) As ShoriPattern shoriInfo.pattern(colCount).title = "運行日付" shoriInfo.pattern(colCount).Required = False shoriInfo.pattern(colCount).Digits = 10 ReDim Preserve shoriInfo.pattern(colCount).checkFormat(0) As CheckFormatPattern shoriInfo.pattern(colCount).checkFormat(0) = CheckFormatPattern.Date shoriInfo.pattern(colCount).Grant = False shoriInfo.pattern(colCount).OutputFormat = "hh:nn" shoriInfo.ColumnsCount = colCount End Select GetShoriDataInfo = shoriInfo End Function Private Sub checkFormat(targetData As String, pattern As ShoriPattern, fmtCount As Integer) Dim numCount As Integer Dim numData As String Select Case pattern.checkFormat(fmtCount) Case CheckFormatPattern.NumHanToZen numData = StrConv(targetData, vbWide) For numCount = 1 To Len(numData) If Not Mid(numData, numCount, 1) Like "[0-9]" Then 'エラーメッセージ End If Next numCount Case CheckFormatPattern.NumZenToHan numData = StrConv(targetData, vbNarrow) For numCount = 1 To Len(numData) If Not Mid(numData, numCount, 1) Like "[0-9]" Then 'エラーメッセージ End If Next numCount Case CheckFormatPattern.Numbers numData = StrConv(targetData, vbNarrow) For numCount = 1 To Len(numData) If Not Mid(numData, numCount, 1) Like "[0-9]" Then 'エラーメッセージ End If Next numCount Case CheckFormatPattern.Date If IsDate(Format(CStr(targetData), pattern.OutputFormat)) = False Then 'エラーメッセージ End If End Select End Sub
■
Public Type KEITO ride_serialNum As Integer getoff_serialNum As Integer unchinData As Integer End Type Public Type UNCHIN sheetName As String keito_data() As KEITO End Type Public unchinData() As UNCHIN Public Enum UnchinSheetColumn serialNum = 1 keitoNum = 2 seiriNum = 4 End Enum Sub さんかくtest() Dim sankaku_s As Worksheet Dim sankakuRow_pos As Integer Dim sankakuCol_pos As Integer Dim seiri_cnt As Integer Dim loop_flg As Boolean Dim seiriLoop_flg As Boolean Dim genkin As Integer Dim sankakuData As Variant Dim nextRowCount As Integer Dim keito_data As Variant Dim loop_keitoCount As Long Dim row_pos As Long Dim col_po As Integer Dim lastColumnCount As Integer Dim lastRowCount As Long Dim KEITO() As String Dim loop_setKeitoCnt As Integer Dim unchin_flg As Boolean Dim dicSeiriColumnData As Object Dim loop_columnflg As Boolean Dim dicKeitoData As Object Dim loop_sankakuRowCnt As Long Dim keito_wk As String Dim keito_wkCnt As Integer Dim serial_number As Integer Dim seiri_number As Integer Dim ride_serialNum As Integer Dim ride_seiriNum As Integer Set dicSeiriColumnData = CreateObject("Scripting.Dictionary") Set dicKeitoData = CreateObject("Scripting.Dictionary") Set sankaku_s = ThisWorkbook.Worksheets("Sheet1") 'intでいいかは確認 Dim keto_cd As Integer seiri_cnt = -1 loop_flg = True ofuku_flg = False 'シートの最終行、最終列を取得 lastRowCount = WorksheetFunction.Match("E", sankaku_s.Range("A:A"), 0) - 1 lastColumnCount = WorksheetFunction.Match("E", sankaku_s.Range("3:3"), 0) - 1 'コードは呼び出し時一意 ' keto_cd = keto_cd + 1 ' ReDim Preserve UnchinData(keto_cd) As Unchin '列データ取得 sankakuData = sankaku_s.Range("$A$3:" & sankaku_s.Cells(lastRowCount, lastColumnCount).Address) row_pos = 1 col_pos = UBound(sankakuData, 2) loop_columnflg = True While loop_columnflg = True If sankakuData(1, col_pos) <> "" Then dicSeiriColumnData.Add sankakuData(1, col_pos), col_pos Else loop_columnflg = False End If col_pos = col_pos - 1 Wend '系統データを取得 ReDim Preserve KEITO(0) As String sankakuData = sankaku_s.Range("$A$4:" & sankaku_s.Cells(lastRowCount, lastColumnCount).Address) For loop_keitoCount = 1 To UBound(sankakuData) If sankakuData(loop_keitoCount, 2) <> "" And dicKeitoData.exists(sankakuData(loop_keitoCount, 2)) = False Then ReDim Preserve KEITO(UBound(KEITO)) As String dicKeitoData.Add sankakuData(loop_keitoCount, 2), loop_keitoCount keito_wk = sankakuData(loop_keitoCount, 2) End If dicKeitoData(keito_wk) = loop_keitoCount Next ReDim Preserve unchinData(0) As UNCHIN ReDim Preserve unchinData(0).keito_data(0) As KEITO For loop_sankakuRowCnt = 1 To UBound(sankakuData) unchinData(UBound(unchinData)).sheetName = sankakuData(row_pos, 2) unchin_flg = True keito_wkCnt = dicKeitoData(sankakuData(row_pos, 2)) unchin_flg = True While unchin_flg = True ride_seiriNum = sankakuData(row_pos, UnchinSheetColumn.seiriNum) ride_serialNum = sankakuData(row_pos, UnchinSheetColumn.serialNum) 'ReDim Preserve UnchinData(UBound(UnchinData)).keito_data(UBound(UnchinData)) As KEITO loop_setKeitoCnt = 1 While row_pos + loop_setKeitoCnt <= keito_wkCnt unchinData(UBound(unchinData)).keito_data(UBound(unchinData(UBound(unchinData)).keito_data)).getoff_serialNum = sankakuData(row_pos + loop_setKeitoCnt, UnchinSheetColumn.serialNum) unchinData(UBound(unchinData)).keito_data(UBound(unchinData(UBound(unchinData)).keito_data)).unchinData = sankakuData(row_pos + loop_setKeitoCnt, dicSeiriColumnData(ride_seiriNum)) unchinData(UBound(unchinData)).keito_data(UBound(unchinData(UBound(unchinData)).keito_data)).ride_serialNum = ride_serialNum If row_pos + loop_setKeitoCnt + 1 <= keito_wkCnt Then ReDim Preserve unchinData(UBound(unchinData)).keito_data(UBound(unchinData(UBound(unchinData)).keito_data) + 1) As KEITO End If loop_setKeitoCnt = loop_setKeitoCnt + 1 Wend If row_pos >= keito_wkCnt Then unchin_flg = False End If row_pos = row_pos + 1 Wend If dicKeitoData.Count > (UBound(unchinData) + 1) Then ReDim Preserve unchinData(UBound(unchinData) + 1) As UNCHIN End If Next End Sub
HTMLTips
・border(線の一部を拡大してみた図)
・それぞれの配置
border-top
border-leftborder-right
・top,left,rightそれぞれの領域
・widthを減らすと、↑のwidthが0になる(つまり、□から▽になる)
・タグの意味
Unorderd list 箇条書き
orderd list
list item
tr table row
th table header
td table data